最大値はありますか?おそらく、基盤となるOSがプロセスごとに「X」数のスレッドしか許可していないなどの理由でしょうか?
3 に答える
これは、使用している CPU、OS、他のプロセスが実行していること、使用している Java リリース、およびその他の要因によって異なります。マシンをダウンさせる前に、Windows サーバーが 6500 を超えるスレッドを持っているのを見てきました。もちろん、ほとんどのスレッドは何もしていません。マシンが約 6500 スレッド (Java で) に達すると、マシン全体に問題が発生し始め、不安定になりました。
私の経験では、Java (最近のバージョン) は、コンピューター自体が問題なくホストできる数のスレッドを喜んで消費できることが示されています。
もちろん、十分な RAM が必要であり、スレッドが実行するすべてのことを実行し、各スレッドのスタックを保持するのに十分なメモリで Java を起動する必要があります。最新の CPU (AMD または Intel の最新の数世代) と 1 ~ 2 ギガのメモリ (OS による) を備えたマシンは、数千のスレッドを持つ JVM を簡単にサポートできます。
これよりも具体的な回答が必要な場合は、プロファイルを作成することをお勧めします。
常に何らかの最大値がありますが、その値とその決定方法は大きく異なります。特に、この制限は、JVM の総メモリ割り当てプールの制限によって、または明示的な OS レベルの制限によって暗黙的に課される可能性があります。メモリ制限を回避する 1 つの方法は、JVM のスタック サイズを小さく設定することです。
Linux で制限がどのように決定されるかについては、この回答を参照してください。
Linuxでは、最大で32000まで見ましたが、その後は新しいスレッドの作成に失敗します。CPUにバインドされたタスクがある場合、最適なスレッド数はCPUの数である可能性が高いため、通常、このような数にすることはお勧めできません。