为什么“同时为真”会使用100%的CPU资源?

时间:2019-02-08 18:17:02

标签: cpu cpu-usage

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

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

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

2 个答案:

答案 0 :(得分:8)

如果您的CPU使用率不是100%,则该进程可以使用任意数量的资源(最多100%),直到其他进程请求使用资源为止。 process scheduler试图最大化CPU使用率,并且如果没有其他进程需要它,则永远不要让该进程饿死CPU时间。

因此,您的while循环将使用100%的可用空闲CPU资源,并且仅在启动其他占用大量CPU的进程时才开始使用较少的资源。 (如果您使用的是Linux / Unix,则可以通过启动top循环,然后启动另一个占用大量CPU的进程,并通过循环查看该进程的CPU下降百分比,以while进行观察)

答案 1 :(得分:2)

在多任务OS中,CPU时间在执行流(进程,线程)之间分配-是的。因此,这里发生了什么-循环一直执行到时钟中断发生的某个点为止,OS将该循环用于调度其他进程或线程的下一个执行“片段”。但是,只要您的代码没有达到特定的点(输入/输出或其他系统调用,它们可以将进程切换到“等待”状态,例如等待同步对象的睡眠操作等),进程就一直处于告诉调度程序将其保留在执行队列中并在第一个最佳时机重新调度其执行的“正在运行”状态。如果有一些“竞争性”进程长时间保持其“运行”状态,那么您和所有这些进程之间将共享CPU使用率,否则您的进程执行将立即重新安排,这将导致持续不断的高CPU消耗。