マルチスレッドとマルチプロセスについて再度おさらい
しょっちゅうどっちがどっちか忘れるので自分も記事にしました。
すでに弊社メンバーも記事書いてくれてます。
サンタさんでそれぞれの違いを説明してくれてるのでめちゃくちゃ分かりやすいと思います。
結論
複数外部サービスと連携をしながら1連の処理をするAPIがあるとして...
マルチプロセス...API自体を複数同時に実行させたい時に活用
使う時:
・複数ユーザーが同時にリクエストが来る時
・レスポンスを返すまでに時間がかかる時
・(複数アクセスが来るけど)APIのレスポンスを改善したい時
マルチスレッド...APIの中にある処理を複数同時に実行させたい時に活用
使う時:
・APIの中で複数の外部サービスと連携してデータを取得や加工する時
・一連の処理を同期的にする必要がない時
・(中の処理が多いけど)APIのレスポンスを改善したい時
そもそも「プロセス」・「スレッド」とは
「プロセス」はコンピュータで動いている一つのプログラム・処理のことを指します。
「スレッド」はプロセス
の中でさらに処理を分けた単位のことを指します。
複数のスレッドが合わさって一つのプロセスになります。
プロセスとスレッドは1対多の関係です。
マルチプロセス
複数のプロセスが同時に動くこと。
メリットとしてはプロセス同士は独立しているので、どこかのプロセスがエラーになっても他のプロセスに影響が出ることが少ないです。
また一つのAPIエンドポイントに複数アクセスが来ても「片方が終わったら次の~」とはならずリクエストごとに対応するので、その分レスポンスも速くなります。
Pythonにはmultiprocessingというのがあります。
モンハンでいうところの
マルチスレッド
一つのプロセスの中で複数のスレッドを同時に動くこと。
スレッド同士が同じメモリを共有してるので情報のやり取りが高速です。
その代わりどこかのスレッドで問題が発生すると別スレッドに影響が出る可能性が高いです。
Pythonにはmultithreadingというのがあります。
モンハンでいうところの
実際の例で説明
例えばユーザーがアップロードしたレポートの添削して結果を返してくれる機能があるとします。
すると処理としては以下になるかと思います。
1. 送られてきたファイルをOCRして文字化
↓
2. ファイルをFile Storageにアップロード
↓
3. 文字化した情報を生成AIに送って添削結果を取得
↓
4. 添削結果をデータベースに保存
↓
5. ユーザーに添削結果を返却
この場合、3.の処理は2.の処理を待つ必要がないので、2.と3.はマルチスレッドを使って同時処理させます。
また添削機能自体、複数人同時アクセスが頻発する場合はマルチプロセスを使って解決します。
Discussion