Является ли puma ЕДИНСТВЕННЫМ многопоточным сервером rails 4 http?

Я преобразовал наш стек в Rails 4 (да!)

и я хочу воспользоваться потокобезопасным кодом.

Puma работает при вставании, останавливаться - другая проблема :(

Является ли Puma единственными многопоточными рельсами?

Thin -> EventMachine
Unicorn -> Forking
Puma -> multi-threaded

Mongrel -> don't care
Webbrick -> don't care

person Daniel    schedule 27.07.2013    source источник
comment
Разве это не относится к категории программных инструментов, обычно используемых программистами, и, следовательно, не относится к теме?   -  person Brad Werth    schedule 28.07.2013
comment
Я проверил страницу about - stackoverflow.com/about, возможно, немного в серой области, но я думаю, что это подходит.   -  person Daniel    schedule 29.07.2013


Ответы (2)


№ В алфавитном порядке:

  • Iodine альтернатива HTTP/Websocket Server и EventMachine (на основе kqueue/epoll)
  • Net::HTTP::Server, несмотря на отсутствие рекламы, поддерживает многопоточность
  • Phusion Passenger поддерживает многопоточность с бета-версии v4
  • Rainbows! поддерживает несколько моделей параллелизма, включая многопоточность.
  • Reel – это Celluloid-поддерживаемый событийный сервер, который также отлично подходит для многопоточных приложений и также обеспечивает поддержку традиционного многопоточного блокирующего ввода-вывода.
  • Thin имеет многопоточный режим, который можно включить, передав --threaded или установка threaded: true в соответствующем файле конфигурации (например, bundle exec thin start --threaded)
  • WEBrick сам по себе многопоточен, поэтому было бы несправедливо исключать его как вариант; если вы используете встроенную версию Rails, вам потребуется monkey-patch Rails::Server, чтобы включить многопоточность
  • Zbatery основан на Rainbows! и поддерживает все модели параллелизма, которые поддерживает Rainbows! поддерживает

Обратите внимание, что в настоящее время MRI Ruby запускает только один поток за раз из-за его глобальная блокировка интерпретатора (GIL). Вы действительно сможете использовать многопоточность, только используя другую среду выполнения Ruby, такую ​​как JRuby или Rubinius, которые обеспечивают доступ к собственным потокам. Если вы решите использовать JRuby, есть несколько JVM-зависимых серверов, которые стоит изучить.

person fny    schedule 26.08.2013
comment
Благодарю вас! Это здорово помогло - person Daniel; 27.08.2013
comment
Еще один из списка: iodine также поддерживает как многопоточность, так и многопроцессность. - person Myst; 12.09.2016
comment
Это определенно многопоточность. См. ссылки выше или исходный код: github.com/nahi/ webrick/blob/master/lib/webrick/server.rb - person fny; 16.01.2018
comment
OMG, я только сегодня узнал, что WEBrick является многопоточным! И вроде даже работает не плохо. - person NobodysNightmare; 09.11.2020

Тринидад хорош. Очень мощный сервер для разработки 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/

Хороший учебник по настройке сервера Trinidad:

http://blog.jruby.org/2012/04/two-apps-one-trinidad/

person John Moore    schedule 11.02.2014