当前位置: 首页 > 面试题库 >

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

微生承业
2023-03-14
问题内容

我用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的不是吗?


问题答案:

默认情况下,top在Linux上以所谓的IRIX模式运行,而Windows Task Manager不运行。假设您有4个核心:

  • 在IRIX模式下,1个完全利用的内核为100%,4个内核为400%。

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

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

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



 类似资料:
  • 我在Windows上使用Oracle JRE,在Linux上使用OpenJDK6。 我想知道Windows的调度程序是否随机抢占线程而Linux的没有?

  • 问题内容: 在Python控制台中: 给我: 为什么?有人可以用二进制给我解释这个特殊情况吗? 问题答案: 是。 是: 并且是: 这是在两个补1 1翻转所有位,将1加到结果数上,并将结果解释为幅度的 二进制表示形式 ,并添加一个负号(因为数字以1开头): 它是2,但是由于MSB是1 ,所以符号是负数。 值得一提: 想一想,您会发现它本质上是数字-它有两个值和,它们只是整数1和0的“自定义”版本,它

  • 问题内容: 当用于运行“ ”(仅作为示例)时,在Windows上我们得到以下信息: 因此,可以按照我的期望很好地打印出该版本。但是在Linux上,我们得到以下信息: 因为gcc尚未收到该选项。 文档没有明确指定Windows下的args应该发生什么,但是它确实说在Unix上, “如果args是一个序列,则第一项指定命令字符串,任何其他项都将被视为其他shell参数。 。” 恕我直言,Windows

  • 问题内容: 我正在用Python做一个机器学习项目,所以我必须做并行预测功能,这是我在程序中使用的功能。 问题是我所有的CPU仅加载20-40%(总和为100%)。我使用multiprocessing.dummy,因为我在酸洗功能中的多处理模块有一些问题。 问题答案: 使用时,您使用的是线程,而不是进程: 复制API的API,但仅不过是模块周围的包装器。 这意味着您受到全局解释器锁(GIL)的限制

  • 问题内容: 我正在尝试扩展一些以填充屏幕,但是我很挣扎。我已经解决了这个jsfiddle的问题。 我真正想知道的是,当其父项具有相同的属性并且会扩展时,为什么100%的不会扩展到那个高度(或根本不扩展)? 问题答案: CSS 2.1规范涵盖了该问题: < 百分比> 指定百分比高度。相对于生成的盒子的包含块的高度计算百分比。如果未明确指定包含块的高度(即,它取决于内容的高度),并且该元素的位置不是绝

  • 我使用Win 10 Pro N(版本1709)作为开发机器,使用Windows Server 2016 Standard(版本1607)作为生产服务器。 我目前正在开发一个使用MongoDb作为数据库的ASP.NET Core2应用程序。 几天前,我第一次偶然发现了这个想法,将MongoDb作为Docker映像运行。 这是个好决定吗?或者在我的场景中我应该使用Linux容器而不是Windows容器