为什么“而真正的”使用的CPU资源的100%?

问题描述 投票:5回答:2

我跑在Linux服务器上的Java代码:

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

这导致一个CPU核心达到100%的使用率。我很困惑这个,因为我了解到的CPU处理任务的时间分裂,这意味着CPU将在一个时隙(CPU时间范围调度程序)做的一项任务。如果有10个时隙,而在真正的任务,应该有最多使用10%的CPU使用率,因为其他90%的人会被分配到其他任务。那么,为什么100%?

cpu cpu-usage
2个回答
8
投票

如果您的CPU使用率不是100%,则该过程可以用就是了(达100%),直到其他进程所请求的资源使用尽可能多的。该process scheduler试图最大限度地使用CPU,再也不离开饿死CPU时间的过程中,如果有需要就没有其他进程。

所以,你的while循环将利用现有闲置的CPU资源的100%,并且只开始使用的时候少等CPU密集型进程启动。 (如果你使用的Linux / Unix,你可以用top通过启动你的while循环,然后开始另一个CPU密集型的过程观察这一点,并观看过程中与环路%的CPU下降)。


2
投票

在多任务OS的CPU时间被分割执行流(进程,线程)之间 - 这是事实。那么,这里发生了 - 循环,直到某一点时出现时钟中断,这是用来通过OS调度来自其它进程或线程一次执行“作品”被执行。但是,一旦你的代码没有达到特定点(输入/输出或其它系统调用其可以在过程切换到“等待”状态,例如等待同步对象睡眠操作等)的过程中保持在被在“运行”状态,它告诉调度,以保持它在执行队列,并在第一最好机会重新安排其执行。如果有一些“竞争”的过程,其保持他们的“正在运行”状态的时间长周期以及CPU的使用率将您的所有这些进程间共享,否则你的流程会立即重新安排,这将导致持续的高CPU消耗反正。

© www.soinside.com 2019 - 2024. All rights reserved.