たとえば、4 コアの CPU があり、あるプロセスを最短時間で実行したいとします。プロセスは理想的には並列化可能なので、プロセスの一部を無限の数のスレッドで実行でき、各スレッドにかかる時間は同じです。
コアが 4 つあるので、コア数より多くのスレッドを実行しても速度が向上するとは期待できません。1 つのコアでは、一度に 1 つのスレッドしか実行できないからです。ハードウェアについてはあまり詳しくないので、これは単なる推測です。
並列化可能なプロセスをコア数よりも多くのスレッドで実行することには利点がありますか? つまり、4 つのスレッドではなく 4000 のスレッドを使用してプロセスを実行した場合、プロセスはより速く、より遅く、またはほぼ同じ時間で終了しますか?
ベストアンサー1
スレッドが I/O や同期などを行わず、他に何も実行されていない場合は、コアごとに 1 つのスレッドで最適なパフォーマンスが得られます。ただし、そうならない可能性が非常に高いです。スレッドを追加すると通常は効果がありますが、ある時点を超えるとパフォーマンスが低下します。
少し前、私は 2 つのクアッドコア マシンで、Mono 上で ASP.NET アプリケーションをかなりの負荷で実行し、パフォーマンス テストを行っていました。最小スレッド数と最大スレッド数を試した結果、特定の構成の特定のアプリケーションでは、36 から 40 スレッドの間でスループットが最適であることがわかりました。この範囲外ではパフォーマンスが低下しました。教訓は何でしょうか。私なら、アプリケーションに適したスレッド数が見つかるまで、さまざまなスレッド数でテストします。
確かなことは、4k スレッドでは時間がかかるということです。コンテキスト スイッチが大量に発生します。