当我打开任务管理器和进程资源管理器时,我可以看到它们显示不同的 CPU 利用率值。此外,“流程”和'细节'标签中的相同的任务管理器显示不同的 CPU 利用率值。我想了解原因,所以我尝试做了一些研究。
我猜想这种差异是因为有些性能监视器在计算时会考虑 CPU 速度,而有些则不会。为了测试这个理论,我在 Python 中创建了一个不使用 IO 的简单无限循环:while True: pass
。这应该会耗尽它所运行的核心,因为它根本不使用 IO,所以核心没有空闲的空闲时间。
我运行循环来查看结果:
- 进程浏览器:python.exe 8.34%
- 任务管理器的详细信息选项卡:python.exe 8%
- 资源监视器:最大频率180%
- 任务管理器的进程选项卡:python.exe 16.8%
- 进程浏览器 CPU 使用率:10.28%
- 资源监视器:CPU 使用率 19%
- 任务管理器的性能选项卡:CPU 利用率 19%
现在让我们做一些数学运算并解释这些值。我使用的是 12 个逻辑处理器,基本速度为 2.21GHz,因此结果是:
- 进程浏览器:python.exe 8.34%
- 我的 Python 程序应该会耗尽单个核心。我的系统有 12 个逻辑核心,因此 100/12 大约为 8.34。
- 任务管理器的详细信息选项卡:python.exe 8%
- 与之前的计算相同,但任务管理器将结果四舍五入为 8%。
- 资源监视器:最大频率180%
- 基本速度的 180% 约为 3.98GHz,这是我的测试期间的 CPU 速度。
- 任务管理器的进程选项卡:python.exe 16.6%
- 8.34 的 180% 是 15,它不完全是 16.6,但非常接近......
- 进程浏览器 CPU 使用率:10.28%
- 它看起来像是没有任何规模的‘真实’ CPU 使用率。
- 资源监视器:CPU 使用率 19%
- 10.28 的 180% 是 18.5,非常接近
- 任务管理器的性能选项卡:CPU 利用率 19%
- 与任务管理器性能选项卡相同
这一切加起来都相当简单:Process Explorer 显示没有任何刻度的 CPU 使用率,任务管理器和资源监视器则以当前 CPU 速度的刻度显示(除了细节选项卡)。任务管理器似乎无法显示超过 100% 的值,但资源监视器可以。
我又尝试了一次,现在在几个核心上有几个循环,所以差异会更加显著:
- 资源监视器:最大频率156%
- 基本速度的 156% 约为 3.44GHz,这是我的测试期间的 CPU 速度。
- 进程浏览器 CPU 使用率:69.57%
- 它看起来像是没有任何规模的‘真实’ CPU 使用率。
- 资源监视器:CPU 使用率 109%
- 69.57 的 156% 是 108.52,可以四舍五入为 109。
- 任务管理器的性能选项卡:CPU 利用率 100%
- 与资源监视器相同,但上限为 100%
我的问题是:
我是对的吗?我试图在网上寻找任何证据,但似乎没有人做过同样的计算。事实上,有些人对这种差异给出了相互矛盾的解释……我遗漏了什么吗?
我在这个网站上发现了类似的问题,但他们的答案似乎不正确或与我的问题无关:
- 其中一些人解释说,可能有来自其他用户的进程。这与此无关,因为我看到来自所有用户的进程。
- 其他一些答案解释说,Process Explorer和任务管理器有不同的轮询算法。这很好,但它没有解释流程和细节同一个任务管理器的选项卡。
- 其他答案提到 CPU 使用率和 CPU 速度之间没有联系。据我所知,这是错误的,因为显然存在联系(如我上面所示),并且这种联系实际上解释了差异。我遗漏了什么吗?
我读过的问题: