单线程应用程序在 CPU 核心之间如何平衡?

单线程应用程序在 CPU 核心之间如何平衡?

有没有一种简单的方法来检查 Windows 是否在 CPU 内核之间平衡某个单线程应用程序?

我已经尝试过 Process Explorer,但我找不到读取它的方法,如果可能的话。

我之所以想知道这一点,是因为我知道并非所有单线程应用程序都能实现平衡,而是坚持使用 1 个核心。

答案1

“平衡”是一个相对术语。

在核心之间移动进程可能会使某些优化失效(共享缓存有帮助,但 CPU 寄存器仍然是每个核心的),因此如果您的操作系统通过移动进程来“平衡”进程,则可能弊大于利。
对于高度优化(通常是手工编写的汇编)的程序,恢复寄存器状态所需的时间可能比让进程独享一个 CPU 所需的时间更长。

另一方面,如果 CPU 密集型进程不大量使用寄存器,也不太在意是否需要重新加载寄存器,并且 CPU 争用现象严重,则将其移至任何可用的处理器可能会提高性能。

我在这里要说的是,对于单线程进程你不在乎——相信您的操作系统的调度程序会做正确的事情(在这种事情上它确实比您更聪明)。


对于多线程进程,同样的逻辑适用,只是多次:你关心在哪里只要线程获得所需的 CPU 时间并且运行速度快,它们就会一直运行吗?
我的猜测是不会。


回答你提出的问题:因为你真的不应该关心,所以我不认为这是不可能的。

在 Windows 中肯定没有简单的方法可以实现这一点(任务管理器和 Process Explorer 无论如何都不会公开它)。您可以查看 Power Shell 脚本,但我也不认为有办法在那里做到这一点……

相关内容