cpu - 为什么“当真”会使用 100% 的 CPU 资源?
问题描述
我在 Linux 服务器上运行了以下 Java 代码:
while (true) {
int a = 1+2;
}
它导致一个 CPU 核心达到 100% 的使用率。我对此感到困惑,因为我了解到 CPU 通过时间拆分来处理任务,这意味着 CPU 将在一个时隙中执行一项任务(CPU 时间范围调度程序)。如果有 10 个时隙,那么 while true 任务最多应该使用 10% 的 CPU 使用率,因为其他 90% 将分配给其他任务。那么为什么是100%呢?
解决方案
如果您的 CPU 使用率不是 100%,那么该进程可以根据需要使用尽可能多的资源(最高 100%),直到其他进程请求使用该资源。进程调度程序尝试最大化 CPU 使用率,并且如果没有其他进程需要它,则永远不会让进程缺乏 CPU 时间。
因此,您的while
循环将使用 100% 的可用空闲 CPU 资源,并且只有在启动其他 CPU 密集型进程时才会开始使用更少的资源。(如果您使用的是 Linux/Unix,您可以top
通过启动while
循环来观察这一点,然后启动另一个 CPU 密集型进程并观察循环进程的 % CPU 下降)。
推荐阅读
- flutter - 在 Flutter 中带有 Map 的 DropdownMenuItem
- c# - 如何获取小数点后的 3 个值而不将其转换为 C# 中的字符串(原始值为双精度值)
- sql - 如何在 Oracle 上透视此表?
- sql - 使用 select posgresql 插入
- python - 如何根据串行读取实时更改 bg 颜色?
- c - 使用 memcpy 和 offsetof 复制结构的一部分
- python - 如何在一个周期内使用生成器输出和列表?
- php - Laravel 7.14 显示用户购物车中不可用的产品
- javascript - 如何连接容器内的嵌套地图功能?
- android - 具有 ID 和可见性的 RecyclerView 项目的 Espresso 匹配器