プロセス、スレッド、並行処理、並列処理とか
プロセスとスレッド
プロセス: プログラムの実行単位. 仮想メモリはプロセスに対して関連づいている.
スレッド: プロセス内の実行単位. 仮想メモリは共有.
並行処理と並列処理
並行処理: 異なるタスクを瞬時的に切り替えながら実行
並列処理: 実際に同時に実行する
マルチスレッドとか
マルチスレッド+シングルプロセッサ
→プロセスの実行状態は並行的
マルチスレッド+マルチプロセッサ
→プロセスの実行状態は並列的
同期処理と非同期処理
同期処理: 処理の終了を待つ
非同期処理: 処理の終了を待たない
C#とかだと、非同期処理で、awaitが付けられたところは別スレッドで動くようになっていて、今のスレッドを邪魔しないようになっている.
reference: https://qiita.com/4_mio_11/items/f9b19c04509328b1e5c1
cpuバウンドとioバウンド
cpuバウンド: プログラムが原因で、CPUにかかる負荷. コアの周波数を無くすか、複数コアで処理するようにする. コンテキストスイッチにかかるオーバーヘッドを削減するために、並列化はコア数程度にしておく.
ioバウンド: 計算の完了に要する時間が主に入出力操作の完了を待機するのに費やされた時間によって決定される状態.
(pythonだとGILの制約があって、1プロセス1スレッド. だからcpuバウンドな処理については複数スレッド用意してもシリアル化されて順次実行されるから意味ない. だからcpuバウンドはマルチプロセスにする. ioバウンドな処理についてはGILの制約が解除されるぽいから、マルチスレッドにして意味ある. マルチプロセスにしても意味あるけどコンテキストスイッチに時間かかるかも)
reference: https://tech.nkhn37.net/pythoni-parallel-process-io-cpu-bound/#IO
Discussion