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

2022-08-31 07:16:10

我用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则没有?


答案 1

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

  • 打开IRIX模式后,1个完全利用的核心是100%,4个核心是400%。

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

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

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


答案 2