161

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

4

1 回答 1

393

默认情况下,topLinux 以所谓的 IRIX 模式运行,而 Windows 任务管理器则没有。假设您有 4 个核心:

  • 开启 IRIX 模式时,1 个充分利用的核心为 100%,4 个核心为 400%。

  • 关闭 IRIX 模式时,1 个充分利用的核心为 25%,4 个核心为 100%。

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

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

于 2013-01-29T09:11:26.663 回答