【问题标题】:How can CPU usage max out at 50% but not use one CPU effectively?CPU 使用率如何最高达到 50% 但不能有效地使用一个 CPU?
【发布时间】:2017-01-02 09:37:36
【问题描述】:

假设我有一个线程绑定到一个 CPU 的 java 程序。从下图的左侧 - 我们可以看到两个 CPU 中的一个被最大化。 (它已经保持这个位置一段时间了)。

但右图显示不同的 CPU 正在执行不同的活动,其中一个没有被阻塞。

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

【问题讨论】:

  • “如何有效使用 CPU nof”这个问题没有直接答案(有数百万个答案)。
  • 这可能是你看到的超线程......其中 MS 为每个内核应用 2 个执行线程
  • 这是什么CPU?
  • 进程右键,查看亲和度。除非您阻止这种情况,否则进程会从一个核心跳转到另一个核心
  • 您能否将其扩展为@Marged 的​​答案?

标签: java cpu cpu-usage single-threaded


【解决方案1】:

即使您的进程仅使用一个内核/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 上的样子:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多