-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve BoundedElasticScheduler to be less blocking #2909
Conversation
note that I wasn't really able to trigger the blocking behavior and BlockHound complaint around the |
I need to refine the benchmark, but preliminary benchmark of running 1000 tasks on a 100 thread bounded scheduler shows the following results:
|
I'm not entirely comfortable delivering this in next week's release without some user feedback. |
we may need a stresstest for the updated impl. |
Looks good to me in general. Curious if it is possible to see the efficiency of the algorithm in case of tasks which are heterogeneous in time |
BoundedState choice = arr[0]; | ||
int leastBusy = Integer.MAX_VALUE; | ||
|
||
for (int i = 0; i < arr.length; i++) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As I mentioned before, can we do random choices here instead of iterating? Alternatively - can we just iterate a constant times or less if the array is smaller?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
that is what we do in rsocket weighted loadbalancer -> https://github.com/rsocket/rsocket-java/blob/master/rsocket-core/src/main/java/io/rsocket/loadbalance/WeightedLoadbalanceStrategy.java#L91
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
let me capture that as a follow-up issue and merge this one for now 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
see #2927
@simonbasle thank you for your effort. Soon I will finish testing and keep you updated. Wondering if this fix will solve the below issue as well?
|
@ssalamov it should, yes, as it will entirely remove the |
@simonbasle, I tested and couldn't find the blocking operation with |
….16 (#778) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [io.projectreactor:reactor-core](https://togithub.com/reactor/reactor-core) | `3.4.15` -> `3.4.16` | [![age](https://badges.renovateapi.com/packages/maven/io.projectreactor:reactor-core/3.4.16/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/io.projectreactor:reactor-core/3.4.16/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/io.projectreactor:reactor-core/3.4.16/compatibility-slim/3.4.15)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/io.projectreactor:reactor-core/3.4.16/confidence-slim/3.4.15)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>reactor/reactor-core</summary> ### [`v3.4.16`](https://togithub.com/reactor/reactor-core/releases/v3.4.16) [Compare Source](https://togithub.com/reactor/reactor-core/compare/v3.4.15...v3.4.16) Reactor-Core `3.4.16` is part of **`2020.0.17` Release Train (`Europium` SR17)**. This service release contains a few bugfixes and improvements. #### What's Changed ##### ✨ New features and improvements - Improve BoundedElasticScheduler to be less blocking by [@​simonbasle](https://togithub.com/simonbasle) in [https://github.com/reactor/reactor-core/pull/2909](https://togithub.com/reactor/reactor-core/pull/2909) - Add EmitFailureHandler.busyLoop flavor by [@​Animesh27](https://togithub.com/Animesh27) in [https://github.com/reactor/reactor-core/pull/2943](https://togithub.com/reactor/reactor-core/pull/2943) ##### 🐞 Bug fixes - Fix Mono.then not cancelling between Callable sources by [@​simonbasle](https://togithub.com/simonbasle) in [https://github.com/reactor/reactor-core/pull/2934](https://togithub.com/reactor/reactor-core/pull/2934) ##### 📖 Documentation, Tests and Build - Update Gradle to v7.4 in [https://github.com/reactor/reactor-core/pull/2922](https://togithub.com/reactor/reactor-core/pull/2922) - \[doc] Correct flux subscribe example in faq by [@​liukun2634](https://togithub.com/liukun2634) in [https://github.com/reactor/reactor-core/pull/2924](https://togithub.com/reactor/reactor-core/pull/2924) - Show how-to-fix hints in CI when preliminary steps fail (check of license headers, api compatibility) by [@​simonbasle](https://togithub.com/simonbasle) in [https://github.com/reactor/reactor-core/pull/2932](https://togithub.com/reactor/reactor-core/pull/2932) - \[guide] Remove ref to Swing/SwtScheduler in addons appendix by [@​simonbasle](https://togithub.com/simonbasle) in [https://github.com/reactor/reactor-core/pull/2959](https://togithub.com/reactor/reactor-core/pull/2959) - \[build] Have jcstress part of slowerChecks by [@​simonbasle](https://togithub.com/simonbasle) in [https://github.com/reactor/reactor-core/pull/2958](https://togithub.com/reactor/reactor-core/pull/2958) ##### 🆙 Dependency Upgrades - Update plugin spotless to v6.3.0 in [https://github.com/reactor/reactor-core/pull/2925](https://togithub.com/reactor/reactor-core/pull/2925) - Update plugin bnd to v6.2.0 in [https://github.com/reactor/reactor-core/pull/2941](https://togithub.com/reactor/reactor-core/pull/2941) - Update dependency org.awaitility:awaitility to v4.2.0 in [https://github.com/reactor/reactor-core/pull/2945](https://togithub.com/reactor/reactor-core/pull/2945) - Update dependency ch.qos.logback:logback-classic to v1.2.11 in [https://github.com/reactor/reactor-core/pull/2946](https://togithub.com/reactor/reactor-core/pull/2946) - Update dependency com.tngtech.archunit:archunit to v0.23.1 in [https://github.com/reactor/reactor-core/pull/2940](https://togithub.com/reactor/reactor-core/pull/2940) - Update plugin japicmp to v0.4.0 in [https://github.com/reactor/reactor-core/pull/2948](https://togithub.com/reactor/reactor-core/pull/2948) - Update dependency org.mockito:mockito-core to v4.4.0 in [https://github.com/reactor/reactor-core/pull/2951](https://togithub.com/reactor/reactor-core/pull/2951) - Update plugin download to v5.0.2 in [https://github.com/reactor/reactor-core/pull/2950](https://togithub.com/reactor/reactor-core/pull/2950) #### New Contributors - [@​Animesh27](https://togithub.com/Animesh27) made their first contribution in [https://github.com/reactor/reactor-core/pull/2943](https://togithub.com/reactor/reactor-core/pull/2943) 👍 **Full Changelog**: reactor/reactor-core@v3.4.15...v3.4.16 </details> --- ### Configuration 📅 **Schedule**: "after 8am on Friday,before 12pm on Friday" (UTC). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory).
Fixes #2137.