スレッド数決定問題5
改めてスレッド数の問題を定義すると、ある時間内でスケジューリング対象となる、物理的なスレッドの数を決定する事です。「ある時間内」と「スケジューリング対象」いうのがポイントです。並列処理システムは時間が非常に重要です。直列的なシステムは、あまり時間に注意を払わない傾向があります。しかし、並列処理システムを同じ感覚で構築すると、パフォーマンスが悪く、バグが多いものになってしまいます。
並列処理システムを設計する際には、処理が行われるタイミング・処理で使用する物理スレッド数・処理対象となるリソースを考慮して注意深く設計しなくてはなりません。この3つの要素が重要な理由は、処理時間が重なると物理スレッドの数が増加し、共有リソースに関する問題が発生するからです。例えば、処理Aと処理Bの処理時間が重なり、それぞれがCPUの論理コア数と同じだけ必要とする場合、重なった時間帯のスレッド数はCPUの論理コア数の2倍となってしまいます。この場合、想定したパフォーマンスよりも下がってしまいますし、デッドロックや優先順位の逆転などの並列処理特有の問題が発生する可能性もあります。
プログラマは、自分が担当しているシステムの部分について、慎重に実装作業を行います。ですから、1つの処理単位で見れば、正しいものを実装するでしょう。しかしながら、正しい設計を行っていなければ、プログラマが予期しない問題を抱える事になります。その様なシステムは、長期間稼働した後に、色々なトラブルがエンドユーザーの元で発生します。これは避けるべき最悪の事態です。
続く・・・