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

我用 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 不会?

8050 次浏览

默认情况下,Linux 上的 top以所谓的 IRIX 模式运行,而 Windows 任务管理器则不是。假设你有4个核心:

  • 在 IRIX 模式下,1个核心的充分利用率为100% ,4个核心的利用率为400% 。

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

这意味着默认情况下,Linux 上的 top会显示一个 ~ 100% 的无限循环,而 Windows 会显示 ~ 25% ,这意味着完全相同的事情。

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