Confused by all the options we give you? So are we! Here's some tables to help keep your head straight. Remember, engineering is all about trade-offs.
module | rack.input streaming | Ruby 1.8 | Ruby 1.9 | Rubinius | slow clients |
---|---|---|---|---|---|
Unicorn/Base | Yes | Yes | Yes | Yes | No |
Revactor | Yes | No | Yes | No | Yes |
ThreadPool | Yes | Yes | Yes | Yes | Yes |
Coolio | No | Yes | Yes | No | Yes |
ThreadSpawn | Yes | Yes | Yes | Yes | Yes |
EventMachine | No | Yes | Yes | No | Yes |
CoolioThreadSpawn | No | No | Yes | No | Yes |
FiberSpawn | Yes | No | Yes | No | Yes |
FiberPool | Yes | No | Yes | No | Yes |
ActorSpawn | Yes | Not yet | No | Yes | Yes |
NeverBlock | No | Yes | Yes | No | Yes |
CoolioThreadPool | No | Yes | No | No | Yes |
CoolioFiberSpawn | Yes | No | Yes | No | Yes |
WriterThreadPool | Yes | Yes | Yes | Yes | no |
WriterThreadSpawn | Yes | Yes | Yes | Yes | no |
Epoll | no | Yes | Yes | Yes | Yes |
XEpoll | no | Yes | Yes | Yes | Yes |
XEpollThreadSpawn | Yes | Yes | Yes | Yes | Yes |
XEpollThreadPool | Yes | Yes | Yes | Yes | Yes |
module | slow I/O (backend, not client) | thread safety | single thread reentrant |
---|---|---|---|
Unicorn/Base | avoid | No | No |
Revactor | Coolio, Revactor, not Fiber::IO | No | Yes |
ThreadPool | thread-safe Ruby | Yes | No |
Coolio | Coolio | No | No |
ThreadSpawn | thread-safe Ruby | Yes | No |
EventMachine | EventMachine | No | No |
CoolioThreadSpawn | thread-safe Ruby, Coolio | Yes | No |
FiberSpawn | Rainbows::Fiber::IO | No | Yes |
FiberPool | Rainbows::Fiber::IO | No | Yes |
ActorSpawn | thread-safe Ruby | Yes | Yes |
NeverBlock | NeverBlock, EventMachine | No | Yes |
CoolioThreadPool | thread-safe Ruby, Coolio | Yes | No |
CoolioFiberSpawn | Rainbows::Fiber::IO | No | Yes |
WriterThreadPool | avoid | Maybe | Maybe |
WriterThreadSpawn | avoid | Maybe | Maybe |
Epoll | No | No | No |
XEpoll | No | No | No |
XEpollThreadSpawn | thread-safe Ruby | Yes | No |
XEpollThreadPool | thread-safe Ruby | Yes | No |
model | DevFdResponse | AppPool | Rack::Lock | async |
---|---|---|---|---|
Unicorn/Base | no-op | no-op | no-op | lots of RAM :P |
Revactor | no-op | Yes | No! | Revactor itself |
ThreadPool | Yes | Yes | Yes | thread-safe Ruby |
Coolio | Yes | no-op | no-op | DevFdResponse |
ThreadSpawn | Yes | Yes | Yes | thread-safe Ruby |
EventMachine | Yes | no-op | no-op | async_sinatra, Cramp, rack-fiber_pool |
CoolioThreadSpawn | Yes | Yes | Dumb | thread-safe Ruby |
FiberSpawn | Yes | Yes | No! | Rainbows::Fiber::IO, Rainbows.sleep |
FiberPool | Yes | Yes | No! | Rainbows::Fiber::IO, Rainbows.sleep |
ActorSpawn | no-op | Yes | Yes | thread-safe Ruby |
NeverBlock | Yes | Yes* | Yes* | NeverBlock, async_sinatra |
CoolioThreadPool | Yes | Yes | Dumb | Coolio, thread-safe Ruby |
CoolioFiberSpawn | Yes | Yes | No! | Coolio, Rainbows::Fiber::IO, Rainbows.sleep |
WriterThreadPool | Yes | no-op | no-op | thread-safe Ruby in response body only |
WriterThreadSpawn | Yes | no-op | no-op | thread-safe Ruby in response body only |
Epoll | Yes | no-op | no-op | DevFdResponse |
XEpoll | Yes | no-op | no-op | DevFdResponse |
XEpollThreadPool | Yes | Yes | Yes | thread-safe Ruby |
XEpollThreadSpawn | Yes | Yes | Yes | thread-safe Ruby |
require "never_block/frameworks/rails"
(before Rails is loaded)
mail archives: https://yhbt.net/rainbows-public/ http://ou63pmih66umazou.onion/rainbows-public/ nntp://news.public-inbox.org/inbox.comp.lang.ruby.rainbows nntp://ou63pmih66umazou.onion/inbox.comp.lang.ruby.rainbows nntp://news.gmane.io/gmane.comp.lang.ruby.rainbows.general public: rainbows-public@yhbt.net source code: git clone https://yhbt.net/rainbows.git torsocks git clone http://ou63pmih66umazou.onion/rainbows.git