一尘不染

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

linux

我用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的不是吗?


阅读 442

收藏
2020-06-07

共1个答案

一尘不染

默认情况下,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。这将使数字匹配。

2020-06-07