並行実行
マルチプロセス、マルチスレッド、非同期I/Oの違い
マルチプロセスは、プロセス空間を複数作って、それぞれのプロセス空間で処理を実行する仕組み。
プロセス空間はプロセスごとに独立していて、ブロセス間通信でしかリソースをやり取りできない。
どうしても高速に共有したい場合は、共有メモリなどを使う。
マルチスレッドは、1つのプロセス空間の中で、複数の処理を並列的に行う仕組み。
プロセス内のリソースは共有されている。このため特に競合を考慮して設計する必要がある。
現在のPythonではGILにより、複数のスレッドが同時に実行されないようにロックされている。 非同期I/Oは、何らかの処理が終わるまでは待ち状態になり、処理が終わったときに実行可能状態に移り、実際に実行することができる時に実行可能キューから処理が選ばれることになる。
要は「自分が待っている間に他の処理ができる」という仕組み。
どの方式でも、実行可能キューの中から実行するものが選ばれて CPU に割り当てられて実行される。
CPUのコアが複数あれば、複数の処理が同時に並行して実行されることがある。
マルチプロセス、マルチスレッドは、基本的には時分割方式(一定時間が経過したらその処理は待ち状態に移り、別の実行可能な処理を選んで実行する)で処理を切り替えて実現している。