首页 > 解决方案 > 为什么“当真”会使用 100% 的 CPU 资源?

问题描述

我在 Linux 服务器上运行了以下 Java 代码:

while (true) {
   int a = 1+2;
}

它导致一个 CPU 核心达到 100% 的使用率。我对此感到困惑,因为我了解到 CPU 通过时间拆分来处理任务,这意味着 CPU 将在一个时隙中执行一项任务(CPU 时间范围调度程序)。如果有 10 个时隙,那么 while true 任务最多应该使用 10% 的 CPU 使用率,因为其他 90% 将分配给其他任务。那么为什么是100%呢?

标签: cpucpu-usage

解决方案


如果您的 CPU 使用率不是 100%,那么该进程可以根据需要使用尽可能多的资源(最高 100%),直到其他进程请求使用该资源。进程调度程序尝试最大化 CPU 使用率,并且如果没有其他进程需要它,则永远不会让进程缺乏 CPU 时间。

因此,您的while循环将使用 100% 的可用空闲 CPU 资源,并且只有在启动其他 CPU 密集型进程时才会开始使用更少的资源。(如果您使用的是 Linux/Unix,您可以top通过启动while循环来观察这一点,然后启动另一个 CPU 密集型进程并观察循环进程的 % CPU 下降)。


推荐阅读