为什么不带“ Thread.sleep”的“ while(true)”在Linux上导致100%的CPU使用率,而在Windows上却没有?


158

我用Java创建了一个简单的程序:

public static void main(String[] args) throws InterruptedException {
    while (true) 
        ;
}

如果我在Linux机器上运行此程序,它会显示100%的CPU使用率,但不会导致操作系统显示缓慢。但是,如果我在Windows上运行完全相同的代码,则仅显示约20%的CPU使用率。

我在Windows上使用Oracle JRE,在Linux上使用OpenJDK 6。

我想知道Windows的调度程序是否会随机抢占线程,而Linux的不是吗?


5
这取决于操作系统任务计划。
Subhrajyoti Majumder 2013年

52
您有几个核心?当所有内核都忙时,Windows任务管理器报告100%。您的linux工具是否执行类似的操作,或者报告1个内核的工作量占100%,而当所有内核都忙时,它是100*N cores %
2013年

2
我有4个核心,在Linux上,我使用系统监控工具
Maniek

1
@Quoi不是。如果该程序已全部运行,则该线程将在Windows和Linux上运行而不会中断。
David Heffernan

Answers:


387

默认情况下,top在Linux上以所谓的IRIX模式运行,而Windows Task Manager不运行。假设您有4个核心:

  • 在IRIX模式下,1个完全利用的内核为100%,4个内核为400%。

  • 关闭IRIX模式后,1个完全利用的内核为25%,4个内核为100%。

这意味着默认情况下,top在Linux上,无限循环显示为〜100%,而Windows将其显示为〜25%,这意味着完全相同的事情。

您可以在top使用Shift+ 运行时切换IRIX模式i。这将使数字匹配。


2
是的-在“ 4 + 4” i7(超线程)上,一个琐碎的CPU循环以大约17-18%的速度出现。
马丁·詹姆斯

为什么应答者仍然有150UPs,但他的分数仍然是700分?:-/
uday 2013年

5
@uDaY,因为每天最多有200个代表,所以不计算之后的任何投票,仍然会被接受。
sa_ddam213

3
@thatotherguy何时确切地按shift-I进行切换?当top正在运行时?
极客
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.