为什么 CPU 的使用率会达到 50%,却不能有效地使用一个 CPU?

How can CPU usage max out at 50% but not use one CPU effectively?

假设我有一个 java 线程绑定到一个 CPU 的程序。从下图的左侧 - 我们可以看到两个 CPU 之一已经用完了。 (它已经担任了一段时间)。

但右边的图表显示不同的 CPU 正在进行不同的活动,并且没有被阻止。

我的问题是:CPU 的使用率如何达到 50%,却不能有效地使用一个 CPU?

即使您的进程只使用一个内核/CPU Windows 也会尝试将负载分配到所有可用内核。这种情况发生得如此之快/经常发生,以至于似乎没有一个内核被使用到 100%。

如果您告诉 Windows 只使用一个核心,您会看到这个达到 100%。您可以通过打开 taskmgr 并右键单击进程并选择 affinity 或在启动应用程序时执行此操作。

我可以向您展示如何使用 7z 完成此操作,因为无论您使用哪个(单核)应用程序,效果都是一样的。

start /affinity 0x1 7z b -mmt1 确实启动了 7z 并使用 /affinity 0x1 将第一个核心分配为唯一的核心。 (b -mmt1 是为了将 7-zip 置于仅使用一个线程的基准测试模式) 如果您定期启动该进程,您可以从 taskmgr 查看/更改亲和力。

CPU 图表在两种情况下都将显示 100%:

以上所有截图均来自德语 Windows 10,这是英语 Windows 7 的样子: