デュアルコアマシン(Windows XP 32ビット環境)でこのようなプレーンでシンプルなJavaスレッドを実行しています
public static void main(String[] strs) {
long j = 0;
for(long i = 0; i<Long.MAX_VALUE; i++)
j++;
System.out.println(j);
}
私の期待は、高速キャッシュを完全に活用するために単一のCPUに固執することでした(ループ内ではローカル変数jで動作し続けるため、一方のCPU使用率は100%で、もう一方はほとんどアイドル状態になります。驚いたことに、スレッドの開始後、両方のCPUが約40%〜60%で使用されており、一方のCPUの使用率がもう一方のCPUよりもわずかに高くなっています。
私の質問は、不均衡が検出されたときに作動するOS負荷分散メカニズムはありますか?私の場合、Windows OSは、一方のCPUがほぼ100%に達し、もう一方のCPUがほぼアイドル状態になっていることを検出したため、スレッドを別のCPUに定期的に再スケジュールする可能性がありますか?
#EDIT1 考えられる説明を見つけました: http ://siber.cankaya.edu.tr/ozdogan/OperatingSystems/ceng328/node130.html