可能是重复问题:
一个多线程的Java应用程序能很好地利用多核机器吗?
我有一个简单的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的利用率略高于另一个CPU。
我的问题是,是否有任何操作系统负载平衡机制会在检测到不平衡时启动?在我的情况下,Windows操作系统是否发现一个CPU接近100%,而另一个CPU几乎空闲,因此定期重新安排线程到另一个CPU上?
#EDIT1 我已经找到了一个可能的解释: http://siber.cankaya.edu.tr/ozdogan/OperatingSystems/ceng328/node130.html