是否有一种简单的方法来检查某个单线程应用程序是否通过Windows在CPU核心之间进行了平衡?
我已经尝试过Process Explorer,但是如果可能的话,我找不到一种方法来读取它。
我想知道这个的原因是因为我明白并不是所有的单线程应用程序都是平衡的,而是坚持1个内核。
“平衡”是一个相对的术语。
在核心之间移动一个进程会使某些优化失效(共享caching帮助,但是CPU核心仍然是核心),所以如果你的操作系统通过移动它来“平衡”一个进程,可能会造成更多的伤害。
对于高度优化(通常是手工assembly)的程序来说,恢复寄存器状态可能需要更长的时间,而不是让进程保持一个CPU自己。
另一方面,如果一个CPU绑定进程没有大量使用这些寄存器,并且不太在乎是否需要重新加载,并且如果CPU有很多争用,则将其移动到任何处理器可用可能会提高性能。
我在这里得到的是一个单线程的stream程你不关心 – 相信你的操作系统的调度器做正确的事情(它真的比你更聪明)。
对于multithreading进程来说,同样的逻辑只适用于多次:只要他们获得所需的CPU时间并快速运行,您是否关心线程在哪里运行?
我的猜测是不。
回答你问的问题:因为你真的不应该在乎,我不认为这是可能的。
在Windows中确实不是一个简单的方法(任务pipe理器和Process Explorer不会公开它)。 你可以看看Power Shell的脚本,但是我不认为有办法在那里做…