結論
CPUリソースを最大限に使って君のために命かけるん!
→マルチプロセス
大雑把に書けて楽。リソース管理も不要。アプリケーションにマルチコアマシンの計算能力をより良く利用させたい場合は絶対にマルチプロセス。
CPUリソースを食われるのだけは嫌!だって、そんなに大事なことじゃないだもん!だけど、マルチな処理がさせたいん!
→マルチスレッド
リソース管理が面倒。I/Oバウンドなタスクを並行して複数走らせたい場合においては、 マルチスレッドはベストな選択。
Python
JavaやCなどの一部の言語は、タスクを複数のCPUに同時に自動的に送信します。
しかし、Pythonでは、
各プロセスはシングルコアで実行されるため、同じプロセスの複数のスレッドが同じコアで実行される
これPythonでマルチな処理を行う上で最も重要なので覚える
プログラムの粒度
タスク <= プロセス < マルチスレッド < マルチプロセス
の順で大きくなる
プロセス
例)
ブラウザ、ワード、VSCodeなどのプログラム全体のこと
マルチプロセス(並列処理)
複数のCPUコアを使って複数のプロセスを実行すること
並列回路をイメージする
→ イメージのまま同時にプロセスが行われる
メモリ
プロセスごとに独立
例)
ブラウザ、ワード、VSCodeなどのマルチスレッディングなプロセスを同時に使うときにOSが各プロセスを超高速に切り替えて動作している
マルチスレッド(並行処理)
単一のCPUコアを使って、1つのプロセスを分割して複数のタスクを実行すること
直列回路をイメージする
→ 並列処理のようにみせかけること。1本の路をバトンリレーしながらタスクが行われている。
メモリ
複数のタスク(スレッド)が1つのメモリを共有
→ リソースとメモリを管理する必要がある
例)
テレビゲームでは、BGMが再生され、グラフィックが変化し、ユーザの入力を取得するなど、それぞれを別スレッドに分けで同時並行
に実行されている
図で表すと
参考
https://ichi.pro/python-de-no-maruchitasuku-116855511813169