2.x: perf change wait to spin-loop for short async benchmarks #3354
+47
−9
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I've noticed that the
times = 1
async range sometimes produces double the throughput without any change to the underlying structure and I've figured out it is because how my operation system wakes up the await in the benchmark. I switched the tests to spin-loop and now I get a consistent and higher value than before:There are a few light-greens and a few light-reds which I attribute to other fluctuating factors on my computer.
In addition, I've experimented with two optimizations: one for observing a scalar value on a different thread and one where the
OperatorObserveOn
is turned into aPublisherObserveOn
to save on the allocation of aPublisherLift
. The scalar optimization ended up being slower by 15% for some reason I don't understand and thePublishObserveOn
had no impact on the throughput within the error range.