* Simplify `ThreadPool` initializations code in `Puma::Server`
This commit introduces four `ThreadPool` options in `Configuration::DEFAULTS`:
`auto_trim_time`, `reaping_time`, `clean_thread_locals`, and
`out_of_band_hook` they could be configured via file/user options
`Puma::Configuration`.
The auto reap/trim methods stay in `Puma::Server` because the way we test
in `Puma::Server` tests.
Adds `slice(keys)` method to `UserFileDefaultOptions` so it acts
like a Hash and we could read `ThreadPool` options from the user-file-default options.
Adds missing require statement to `test/test_puma_server.rb`, so this test
could run individually.
Co-Authored-By: Shohei Umemoto <cafedomancer@gmail.com>
Co-Authored-By: Nate Berkopec <nate.berkopec@gmail.com>
* Fix out of band
* Fixup lib files
* Fixup tests
Co-authored-by: Juanito Fatas <me@juanitofatas.com>
Co-authored-by: Shohei Umemoto <cafedomancer@gmail.com>
Co-authored-by: MSP-Greg <Greg.mpls@gmail.com>
* Extract calls to purge_interrupt_queue
Move calls to Thread#purge_interrupt_queue to a module function. This
means if/when this pattern needs to change it can change in one place
instead of a dozen or more places.
* Update comment on purge_interrupt_queue [ci skip]
Ruby MRI when used can at most process a single thread concurrently due to GVL. This results in a over-utilisation if unfavourable distribution of connections is happening.
This tries to prefer less-busy workers (ie. faster to accept
the connection) to improve workers utilisation.