Webアプリケーションの処理モデルについて

Webアプリケーション処理モデル対比、イベントループ・マルチスレッド・マルチプロセスのメリット・デメリットと選定基準

Read in: en
Webアプリケーションの処理モデルについて

この記事では、Webアプリケーションの代表的な処理モデルについて書く。

各処理モデルの概要

イベントループモデル(非同期・シングルスレッド)

[ イベントキュー ] → [ イベントループ ] → [ 実行 ]

メリット

デメリット

スレッドモデル(マルチスレッド)

[ プロセス ]
 ├─ スレッド1(リクエストA)
 ├─ スレッド2(リクエストB)
 └─ ...

メリット

デメリット

プロセスモデル(マルチプロセス)

[ リクエストA ] → [ プロセス1 ]
[ リクエストB ] → [ プロセス2 ]

メリット

デメリット

言語ごとの処理モデルと向き・不向き

言語 処理モデル IOバウンド CPUバウンド 備考
Node.js イベントループ(非同期) IO特化、重い計算処理は注意
Go goroutine + M:Nスレッド 軽量スレッドで並列・並行処理が得意
Ruby(MRI) スレッド+GIL(制限あり) GILによりCPU処理は実質シングルスレッド
PHP(FPM) プロセス(1リクエスト=1プロセス) プロセス分離で安定だがオーバーヘッド大
Java マルチスレッド JVMレベルでのスレッド最適化
Python(CPython) スレッド+GIL(制限あり) RubyのMRIと同様にGILの制約あり

各処理モデルの実装上の注意点

イベントループモデル

スレッドモデル

プロセスモデル

まとめ

各処理モデルには一長一短があり、アプリケーションの特性や要件に応じて適切なモデルを選択することが重要である。IOバウンドな処理が多い場合はイベントループモデル、CPUバウンドな処理が多い場合はスレッドモデルやプロセスモデルが適していると考えられる。また、言語ごとの特性も考慮すると良い。

Tags: イベントループ スレッド プロセス
Share: 𝕏 Post Facebook Hatena
✏️ View source / Discuss on GitHub
☕ サポート

このブログを応援していただける方は、以下からサポートをお願いします。いただいたサポートはブログ運営・技術研鑽に活用します。


関連記事