🧵

pumaのスレッドあたり調べました。その1。

に公開

【用語整理】スレッド/プロセスまわり に続いて、普段使っているpumaのスレッド/プロセス周りを調べました。

pumaとは

  • rubyで書かれたWebサーバー
  • ruby on railsのデフォルトのサーバー
    • rails sすると、pumaが動きます
  • マルチプロセス、マルチスレッドに対応している!!!

マルチスレッド

そもそも、MRI(Matz' Ruby Implementation、Rubyの実行環境)上では、Global VM Lock (GVL)という仕組みで、Rubyのコードは1スレッドのみでしか処理できない仕組みになっています。

Pumaは、IO待ち(DBアクセスや外部API通信など)の間にGVLを解放して他スレッドに渡し、複数のスレッドで並行して処理をすることができます。複数あるスレッドが、GVLを奪い合いながら、並行して処理を進めているイメージです。

外部API通信/DB通信などのIO待ちが多い場合、マルチスレッドにすると、並行処理の効果が出そうです。逆に、IO待ちが少ない場合は、並行処理にしたから、処理が早くなるとかはなさそうです。

マルチスレッドというと、勝手に以下のような感じを思い描いていました、、。これは違っていた
。。
⚠️誤った認識です↓

Pumaは、さらにマルチプロセスでも動かすことができます。これは次回調べます〜

スレッドプール

Pumaでは、スレッド数の最小値と最大値を設定でき、設定したmin個~max個の値の中で、いい感じに自動でスケーリングしてくれる。たすかる。

まとめ

  • 世の中には知らないことが多い
  • 知らなくてもいいことなのかもしれない
  • 知りたくなることもある

参考リンク

Discussion