我已经把我们的堆栈转换为Rails 4(太好了!)
现在,我想利用线程安全的代码。
Puma可以启动,但停止似乎是一个不同的问题 :(
Puma是唯一的多线程Rails吗?
Thin -> EventMachine
Unicorn -> Forking
Puma -> multi-threaded
Mongrel -> don't care
Webbrick -> don't care
我已经把我们的堆栈转换为Rails 4(太好了!)
现在,我想利用线程安全的代码。
Puma可以启动,但停止似乎是一个不同的问题 :(
Puma是唯一的多线程Rails吗?
Thin -> EventMachine
Unicorn -> Forking
Puma -> multi-threaded
Mongrel -> don't care
Webbrick -> don't care
按字母顺序,没有。
Iodine
是一个基于 kqueue/epoll 的 HTTP/Websocket 服务器和 EventMachine 替代品Net::HTTP::Server
,尽管没有广告,但支持多线程--threaded
或在适当的配置文件中设置 threaded: true
来启用(例如:bundle exec thin start --threaded
)Rails::Server
以启用多线程注意,目前由于其全局解释器锁(GIL),MRI Ruby一次只能运行一个线程。您只有通过使用不同的Ruby运行时,例如JRuby或Rubinius,才能真正利用多线程,这些运行时提供对本地线程的访问。如果您决定使用JRuby,则有几个依赖于JVM的服务器值得探索。
Trinidad很好用。对于jRuby开发来说是一个非常强大的服务器:
http://blog.jruby.org/2012/04/two-apps-one-trinidad/
http://railscasts.com/episodes/377-trinidad?view=comments
以下是一些很好的基准测试(Trini服务器击败了Puma):
http://carlhoerberg.github.io/blog/2012/03/31/jruby-application-server-benchmarks/
一个不错的特立尼达服务器设置教程: