🧵
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