cpu如何查看自己是不是4核8线程(为什么4核CPU上只有一个核在工作)

在一个内部的邮件列表里,有人问了这样一个问题:为什么我这4核CPU的电脑上,看起来只有一个核在工作,其他三个核好像都处于空闲状态?如果使用任务管理器设置每个进程的亲缘性(Affinity)设置为4核,则电脑应该会运行的更快,这是理所当然的。

这个时候,我会开始一项所谓的”思想调试”,也许你也可以。第一个提示:我的直觉告诉我,资源管理器(Explorer)将它的亲缘性设置成只使用一个核。第二个提示:进程的亲缘性被其子进程所继承。

下面是我对此问题的预测:1. 资源管理器将线程亲缘性设置单核。2. 因为你预览了一个MPG视频文件。3. MPG的解码器在其DLL_PROCESS_ATTACH中调用了SetProcessAffinityMask。4. 因为解码器的作者无法修复多处理器下的Bug。5. 因此,他简单地将进程亲缘性设置为1,从而”修复”了这个Bug。

虽然我的第一个预测是正确的,但其他几个都预测错了。虽然如此,开发团队走在了正确的路上,并成功地引导了进一步的问题研究。

真正的问题原因

有一个第三方外壳扩展,由于它的作者无法解决扩展在多处理器运行场景下的Bug,于是他决定,使用SetProcessAffinityMask来将当前进程(也即资源管理器进程)锁定到一个单一的处理器核心上。”Woo-hoo,我们一次性解决了所有多处理器Bug,可以出去庆祝庆祝了。”因为进程的亲缘性是可以继承的,这导致了所有被资源管理器所启动的进程都继承了此属性,也即它们只会在一个核上运行,即使当前机器配备了一个强大且昂贵的4核CPU。

(后记,我们联系了这家开发外壳扩展的公司,他们声称这个问题已经在其最新的版本中得到了修复。)

总结

大多数情况下,你不需要设置亲缘性,使用系统默认的设定就好。在极少数情况下,当确实需要设置时,记得:你的进程的所有子进程都会继承这个设置。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Psychic debugging: Why your expensive four-processor machine is ignoring three of its processors》

cpu如何查看自己是不是4核8线程(为什么4核CPU上只有一个核在工作)(1)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。