Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is puma the ONLY multi-threaded rails 4 http server?

Tags:

I've gotten our stack converted to Rails 4 (yea!)

and I'm looking to take advantage of the thread-safe code.

Puma works in getting up, stopping it appears to be a different problem :(

Is Puma the only multi-threaded rails?

Thin -> EventMachine Unicorn -> Forking Puma -> multi-threaded  Mongrel -> don't care Webbrick -> don't care 
like image 312
Daniel Avatar asked Jul 27 '13 20:07

Daniel


People also ask

Is Puma multithreaded?

Puma is a multi-threaded web server and our replacement for Unicorn. Unlike other Ruby Webservers, Puma was built for speed and parallelism. Puma is a small library that provides a very fast and concurrent HTTP 1.1 server for Ruby web applications. It is designed for running Rack apps only.

Does Rails use Puma?

Puma is the default server for Rails, included in the generated Gemfile.

Is Puma a web server or application server?

Puma is an HTTP web server derived from Mongrel and written by Evan Phoenix. It stresses speed and efficient use of memory.


2 Answers

Trinidad is nice. A very powerful server for jRuby development:

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

http://railscasts.com/episodes/377-trinidad?view=comments

Here are some good benchmarks (the Trini server beats puma):

http://carlhoerberg.github.io/blog/2012/03/31/jruby-application-server-benchmarks/

A nice Trinidad Server setup tutorial:

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

like image 41
John Moore Avatar answered Sep 19 '22 03:09

John Moore


No. In alphabetical order:

  • Iodine a HTTP / Websocket Server & EventMachine alternative (kqueue/epoll based)
  • Net::HTTP::Server, despite the lack of advertising, supports multithreading
  • Phusion Passenger has supported multithreading since v4 beta
  • Rainbows! supports multiple concurrency models, including multithreading
  • Reel is a Celluloid-backed "evented" server, which "also works great for multithreaded applications and provides traditional multithreaded blocking I/O support too"
  • Thin has a threaded mode, which can be enabled by passing --threaded or by setting threaded: true in the appropriate configuration file (e.g. bundle exec thin start --threaded)
  • WEBrick is on its own multithreaded, so it's not fair to eliminate it as an option; if you're using the Rails-embedded version, you'll need to monkey-patch Rails::Server to enable multi-threading
  • Zbatery is based on Rainbows! and supports all concurrency models that Rainbows! supports

Note that currently MRI Ruby runs only one thread runs at a time due to its global interpreter lock (GIL). You'll only be truly able to exploit multithreading by using a different Ruby runtime such as JRuby or Rubinius, which provide access to native threads. If you decide to go with JRuby, there are several JVM-dependent servers worth exploring.

like image 91
fny Avatar answered Sep 21 '22 03:09

fny