Techioz Blog

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 をサポートします)。