我正在观察某个进程的 CPU 使用率百分比。进程怎么只使用了 50% 的 CPU?进程不是先使用 100%,然后是 0%,然后是 100% 吗?并不是每个其他指令都是一个不同的程序。
答案1
它每秒仅轮询一次总数。您正在查看它使用了多少时间。
如果您发现 CPU 的使用率在 50% 左右停留了一段时间,那么很可能是双 CPU 系统中一个 CPU 的使用率被 100% 所占用。
答案2
从技术上讲,您说得对。在任何给定时间,CPU 要么正在使用,要么未使用。但以图表形式显示这些内容不会有太大帮助,因此图表会平均显示一段时间内的 CPU 利用率,可能是每秒。
答案3
操作系统会将进程调度到特定时间段。因此,如果进程被调度到(比如说)10 毫秒中的 1 毫秒,那么它将使用 10% 的 CPU。
这有点违反直觉,因为(在单线程、单 CPU 系统中),进程要么正在运行,要么未运行。即,它使用了 100% 或 0%。您看到的百分比是在时间窗口内测量的,是操作系统为要运行的进程分配时间段的度量。
请注意,如果您正在访问 I/O,您的进程将不会对此做出贡献。因此,如果您正在进行大量计算,您将记录 100%(假设没有其他运行)。如果您随后等待网络数据包/磁盘访问等,您的 CPU 数字将下降,尽管您的进程仍在运行。
答案4
它基于平均时间。尽管所有线程都可以拥有相同的 CPU 时间(基于优先级),但线程只能说“谢谢,但我闲着”,并将其轮到下一个线程。这就是为什么程序并不总是使用相同的 % 时间,大多数程序消耗 0% 的 CPU,而真正需要 CPU 的程序可能会占用近 100% 的时间。
为什么上限是 50%?你可能有两个 CPU 核心,但它只使用一个。
或者,正如建议的那样,它正在使用超线程,但我不知道它的具体行为方式。