2017-01-02 80 views
0

假设我有一个线程绑定到一个CPU的java程序。从下图左侧 - 我们可以看到两个CPU中的一个被刷新了。 (它已经占据了这个位置一段时间)。CPU使用率如何达到50%,但不能有效使用一个CPU?

但是右边的图表显示不同的CPU正在做不同的活动,而且一个没有被阻止。

enter image description here

我的问题是:如何CPU使用率最高,在50%,但不能有效地使用一个CPU?

+0

问题“如何有效地使用CPU”没有直接的答案(有数百万答案)。 –

+2

这可能是超线程你的看到... MS适用每个核心执行2线程 – Jonathan

+0

这是什么CPU? – Malt

回答

1

即使您的进程只使用一个核心/ CPU,Windows也会尝试将负载分配到所有可用的核心。这种情况发生得非常快/通常看起来好像没有任何核心可以用于100%。

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

我可以告诉你这是怎么用7z完成的,因为使用哪个(单核)应用程序并不重要,效果是一样的。

start /affinity 0x1 7z b -mmt1确实启动7z并使用/affinity 0x1将第一个内核指定为唯一内核。 (b -mmt1用于将7-zip转换为只使用一个线程的基准测试模式) 如果您定期启动进程,则可以从taskmgr中查看/更改关联。 affinity of a process

的CPU图表将在这两种情况下显示出100%:

100% on a single core

以上所有截图都是来自德国的Windows 10,这是它会是什么样子上的英文版Windows 7: enter image description here