MRI のスループットを向上させるために、Puma はどのようにして IO 待機を並行して実行できるのでしょうか?
概要
Puma の README より:
残念ながら、MRI のスループット向上のメカニズムは説明されていません。
MRI がシステム IO を呼び出すときに GIL を解放することは知っていますが、これは Puma ではなく MIR による改善です。
Puma が並列 IO のブロッキングをどのように改善しているのだろうか。
ご参考になれば幸いです。
解決策
Puma は、reactor パターンを使用しています。 Puma 4.0.0 以降、Puma はイベント処理に nio4r を使用しています。これは、epoll や kqueue (libev 経由) などのネイティブ バックエンドを利用できることを意味します。 (JRuby では、nio4r は java.nio をサポートします)。