8章並行処理
本章を読めば以下の問いに答えられるようになる
- 並行処理とは何で、どのように役立つか?
- 並行処理と並列処理の違いは何か?
- 並行処理ができるタスクは何で、できないタスクは何か?
- 並行処理にまつわるパラダイムにはどのようなものがあるのか?
- 並行処理を活用するのはどんなときか?
- 並行処理はどのようにプログラムを高速化するのか?
I/Oはプログラムの流れにとっては厄介な重荷になりえます。ファイルから読み込んだりネットワークソケットに書き込んだりするときには、常に一時停止して、カーネルとやりとりをして、処理の開始を依頼し、完了を待つ必要があります。これだけにかぎらず、メモリの確保の際にも同様の処理が必要ですが、図1-3を振り返ってみると、ほとんどのI/O処理は、CPUより桁違いに遅いデバイスに対して行われます。
例えばネットワークソケットに書き込む場合、典型的な処理は1ミリ秒程度かかりますが、その間に2.4GHzのCPUは2,400,000個の命令を実行できます。最悪なのは、1ミリ秒もの間プログラムを停止しなければならないことです。プログラムを停止して、書き込み処理が完了したというシグナルを待ちます。このような停止状態のことを「I/O待ち」といいます。
並行処理を用いれば、I/O待ちをしながら、この無駄な時間を他の処理に活用できます。例として、図8-1に、I/O待ちの発生する3つの処理を実行するプログラムを示します。逐次的に実行すると、I/O待ちによる損失は3回起こります。並行処理を採用して、I/O待ちの間に他のタスクを実行するようにすれば、I/O待ちを隠すことができます。重要なのは、1つのスレッドで起こることであり、一度に1つのCPUを使う場合にのみ起こる問題であるということです。 ...
Get ハイパフォーマンスPython now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.