スレッド数決定問題4
バッチ処理では、CPUのコア数よりも少し多くのスレッドを多く生成するとよいと書いた理由は、もうひとつあります。それは、大量のデータを処理する場合、少数のスレッドに任せると、何度もクオンタムを使いきってしまうからです。ラウンドロビンスラケージュラで、クオンタムを使いきると、公平にCPUを使用する為に、他のスレッドに実行する権利が渡されてしまいます。そうすると、何回もコンテクストスイッチ(コンテキストスイッチとも呼ぶ)が発生しますし、他のスレッドがCPUを使っている間、バッチ処理を行うスレッドは待たなくてはなりません。この状態になると、単位時間当たりのデータ処理件数が減ってしまいます。処理するデータ量も考慮し、スレッド数を決定しなくてはなりません。
対話処理の場合は、スレッド数はコア数よりも少しすくなくする必要があります。何故ならば、対話処理に於いて最も重要なのは、応答時間だからです。常にCPUのコア数と同じだけスレッドによる処理が行われていると、ユーザーは応答性が悪いシステムだという印象を持ちます。そういった印象はマイナス評価に結び付きます。常にCPUのコア数と同じだけのスレッドを生成するのではなく、ユーザーに応答する為のスレッドを生成する余地を残しておかねばなりません。そうする事により、直ぐに応答できるシステムとなり、ユーザーの印象が良くなります。
察しがいい人は気付いたと思いますが、こうした事から、並列処理システムを構築する場合、システムの特性と局面を見極め、無計画にスレッドを生成してはならないと言えます。もちろん、直列的システムでも設計は重要ですが、並列処理システムはそれ以上に重要なのです。他にも語るべき事がありますが、長くなったので終わります。
続く・・・