我有一个像这样在我的双核机器上运行的简单的 Java 线程(Windows XP 32 位环境)
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 利用率几乎是空闲的。令我惊讶的是,线程启动后两个 CPU 的利用率都在 40%~60% 左右,一个 CPU 的利用率略高于另一个。
我的问题是,当检测到不平衡时,是否有任何操作系统负载平衡机制启动?在我的情况下,Windows 操作系统是否有可能发现一个 CPU 接近 100% 而另一个几乎空闲,因此它会定期将线程重新调度到另一个 CPU?
#EDIT1 我找到了一个可能的解释: http ://siber.cankaya.edu.tr/ozdogan/OperatingSystems/ceng328/node130.html