首页 文章

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

提问于
浏览
156

我在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 回答

  • 386

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

    • 启用IRIX模式后,1个完全使用的核心为100%,4个核心为400% .

    • 关闭IRIX模式时,1个完全使用的核心为25%,4个核心为100% .

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

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

相关问题