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

Man*_*iek 158 java linux windows multithreading cpu-usage

我在java中创建了一个简单的程序:

public static void main(String[] args) throws InterruptedException {
    while (true) 
        ;
}
Run Code Online (Sandbox Code Playgroud)

如果我在Linux机器上运行它,它会显示100%的CPU使用率,但不会导致操作系统显得很慢.但是,如果我在Windows上运行完全相同的代码,它只显示大约20%的CPU使用率.

我在Windows上使用Oracle JRE,在Linux上使用OpenJDK 6.

我想知道Windows的调度程序是否随机抢占线程而Linux是不是?

tha*_*guy 387

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

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

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

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

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

  • @uDaY,因为每天最多有200个代表,之后的任何赞成都不计算,接受的仍然会是. (5认同)
  • @thatotherguy什么时候完全按下shift-I来切换?顶部正在运行? (3认同)
  • 是的-在“ 4 + 4” i7(超线程)上,一个琐碎的CPU循环以大约17-18%的速度出现。 (2认同)