Coalesce multiple client messages if possible before writing #264
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.
This is an optimization for the non-blocking usage where there are
multiple in-flight messages. We now coalesce them into a single buffer
and try to write it to the wire.
Before coming up with this solution, I tried a couple of different ones.
Here is the list of the main ones, and why they didn't work out:
Having a single, pre-allocated bytearray per connection, and copying
message bytes into it. Even with the usage of
memoryviews, slicing andcopying were so expensive.
Implementing framed outbound client messages, and writing frame bytes
into a write buffer in the reactor thread. That resulted in approx. %5
throughput increase for balanced workloads.
This way of implementation results in approx. %10 throughput increase for
balanced workloads.