マルチプロセス vs スレッド Python [重複] 質問する

マルチプロセス vs スレッド Python [重複] 質問する

私は、マルチプロセッシング以上スレッドマルチプロセスはグローバルインタープリタロックを回避できることは知っていますが、他にはどのような利点があるのでしょうか。また、スレッドでは同じことはできないのでしょうか。

ベストアンサー1

私が思いついたいくつかの長所と短所を以下に示します。

マルチプロセッシング

長所

  • 独立したメモリ空間
  • コードは通常は単純です
  • 複数のCPUとコアを活用
  • cPythonのGIL制限を回避
  • 共有メモリを使用しない限り、同期プリミティブの必要性がほとんどなくなります(代わりに、IPC の通信モデルになります)。
  • 子プロセスは中断/終了可能
  • Pythonmultiprocessingモジュールには、次のようなインターフェースを備えた便利な抽象化が含まれています。threading.Thread
  • CPUバウンド処理に必須のcPython

短所

  • IPC は少し複雑で、オーバーヘッドも大きくなります (通信モデル vs. 共有メモリ/オブジェクト)
  • メモリフットプリントの拡大

スレッド

長所

  • 軽量 - メモリ使用量が少ない
  • 共有メモリ - 別のコンテキストからの状態へのアクセスが容易になります
  • レスポンシブなUIを簡単に作成できます
  • GILを適切に解放するcPython C拡張モジュールは並列に実行されます
  • I/Oバウンドアプリケーションに最適なオプション

短所

  • cPython - GILに従う
  • 中断/強制終了不可
  • コマンド キュー/メッセージ ポンプ モデル (Queueモジュールを使用) に従わない場合は、同期プリミティブを手動で使用する必要があります (ロックの粒度を決定する必要があります)
  • コードを理解するのが難しく、正しく記述するのが難しくなるため、競合状態が発生する可能性が劇的に増大します。

おすすめ記事