November 2015
Intermediate to advanced
360 pages
6h 16m
Japanese
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を使う場合にのみ起こる問題であるということです。 ...
Read now
Unlock full access