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.
Make it possible to provide a thread pool where
#on_data
and#on_accept
will be run.Processing the data from a connection is usually the most time consuming part of a network client or server and currently great care needs to be taken to avoid doing too much work on the reactor thread.
With this change you can offload the data processing to other threads. You provide a thread pool when you create a reactor, and every time a data or accept listener is called the call is submitted to the thread pool instead of being called directly.
The only implementation available so far (and also what will be the default) is a null pool which runs the task on the calling thread. This is of course not different from how it currently works, but it provides backwards compatibility.
Applications can implement their own thread pools very easily. The only requirement is that the object implements
#submit(&task) ⇒ Future
.An example implementation of a single-threaded pool is provided in the HTTP client example.