我知道这个问题已经多次以多种方式被问过,但我仍然不清楚CPU负载%的含义。
我将开始解释我现在如何看待这些概念(当然,我可能,肯定会是错误的):
遵循这些原则,我得出结论,在给定时间的CPU负载只能是以下两个值之一:
这显然是错误的,因为taskmgr报告%1%,12%,15%,50%等CPU使用率值。
答案 0 :(得分:2)
如果你看一下Windows上的任务管理器,就会有空闲进程,就是这样,它只显示了没有做任何有用的循环。是的,CPU总是很忙,但它可能只是在循环中运行,等待有用的事情发生。
由于您只有一个核心,因此您不能拥有两个进程 同时执行。
这不是真的。是的,单核心无法实现真正的并行性,但您可以使用preemptive multitasking创建一个错觉。是的,不可能中断指令,但这不是问题,因为大多数指令需要很少的时间才能完成。 OS与时间片共享时间,这明显长于单个指令的执行时间。
What does it mean that a given process, at a given time, is utilizing 1% of a given CPU core
大多数时候,应用程序没有做任何有用的事情。想想等待用户点击按钮开始处理的应用程序。这个应用程序不需要CPU,因此它大部分时间都处于睡眠状态,或者每次获取时间片时它都会进入睡眠状态(参见event loop in Windows)。 GetMessage
正在阻塞,因此这意味着线程将一直处于休眠状态,直到消息到达。那么CPU负载究竟意味着什么?因此,想象一下应用程序接收一些事件或数据来做事情,它将执行操作而不是休眠。因此,如果它利用X%
的CPU意味着应用程序使用X%
CPU时间的过采样时间段。 CPU时间使用量是平均指标。
PS:总结一下CPU负载的概念,想一想速度(就物理而言)。有瞬时和平均速度,所以说到CPU负载,还有瞬时和平均测量。瞬时总是等于0%或100%,因为在某个时间点,过程要么使用CPU,要么不使用CPU。如果进程在250ms的过程中使用100%的CPU并且在接下来的750ms没有使用,那么我们可以说进程加载CPU为25%,采样周期为1秒(平均测量只能是适用于一定的抽样期限。)
答案 1 :(得分:1)
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
单核CPU就像是单通道流量。想象一下,你是一名桥梁操作员...有时你的桥很忙,有车排成一排。您想让人们知道您的桥上的流量是如何移动的。一个合适的指标是在特定时间等待多少辆汽车。如果没有车等待,传入的司机知道他们可以立即开车。如果汽车备份,司机知道他们是在延误。
这基本上是CPU负载。 “汽车”是使用一段CPU时间(“过桥”)或排队使用CPU的过程。 Unix将此称为运行队列长度:当前运行的进程数加上等待(排队)运行的进程数之和。