web-dev-qa-db-ja.com

Javaプログラムのスレッドの適切な数はいくつですか?

Java(またはおそらくJVMをターゲットとする他のほとんどの言語)では、使用するスレッドの妥当な数はどれですか?おそらく、これは使用可能なコア/プロセッサの数に対する比率として表されます。正しいですか?

少なくとも最初は、コアの2倍の数のスレッドが理にかなっているように見えますが、20倍以上のスレッドは不合理に思えます。この比率は、ソフトウェアのタイプやアーキテクチャによって影響を受ける可能性がありますか?より多くのスレッドが実際に意味をなすタイプのソフトウェアや状況はありますか?

[そして、はい、私はそれがいくつかの個別の質問として表現されていることを知っていますが、それらはすべて、どのような状況下でいくつのスレッドが実際に意味があるかということなので、単一の回答がそれらすべてをカバーするのに十分に関連していると思います。 ]

6
3Dave

コメントはたくさんありますが、まだ回答はありません。ここに簡単な突き刺しがあります...

それはあなたのスレッドが何をしているかに依存すると私は言うでしょう。数百のスレッドを使用できますが、それらの大部分が待機しているだけであれば、オーバーヘッドはそれほど発生しません。一方、計算を行う場合は、スレッドの数をコアの数に制限します。さらにスケジュールを設定しても、純粋な計算速度は得られません。さらに、これらのケースでは、代替としてタスクの並列処理を検討する必要がある場合があります。

コードが待機と処理の混合である場合、答えはあまり明確ではありません。物事をスピードアップするために取ることができるさまざまな戦略とは別に、この場合の最善の策は、最適な数を見つけるためにプロファイリングを行うことです。

5
Kevin Hsu