在一个内部的邮件列表里,有人问了这样一个问题:为什么我这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》

思想调试:为什么4核CPU上只有一个核在工作?相关推荐

  1. 服务器cpu只显示一个核,云服务器的1核是指一个cpu吗

    云服务器的1核是指一个cpu吗 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...

  2. 直播 | 256核CPU实现每秒一百万帧的Atari!强化学习并行模拟器EnvPool详解

    近日,新加坡Sea AI Lab提出了一个全新的环境模拟并行执行库EnvPool,使用C++的线程池以及异步执行的机制优化了大规模RL环境的并行,能够兼容已有的gym与dm_env API以及几乎所有 ...

  3. 操作系统应该如何在多CPU上调度工作?

    本章将介绍多处理器调度(multiprocessor scheduling)的基础知识.由于本章内容相对较深,建议认真学习并发相关的内容后再读. 过去很多年,多处理器(multiprocessor)系 ...

  4. 10亿行C ++代码使用3万元/个的电脑处理器AMD Threadripper 3990X:在64核CPU处理器256GB内存电脑上编译需要多长时间?

    作者:Eli M.(Delphi MVP)  RAD Studio由Delphi和C ++ Builder组成.在Delphi方面,Object Pascal编译器是单行编译器,并且编译器本身不是并行 ...

  5. 多核处理器_多核处理器还能走多远?2050年用上1024核CPU

    随着锐龙Threadripper 3990X处理器的上市,AMD在桌面处理器上也带来了64核128线程处理器了,这是目前最强大的桌面CPU,甚至短时间内都没可能有竞品超过它了. 想想两三年前,市面上的 ...

  6. linux内核线程绑定到单个核,linux 将进程或者线程绑定到指定的cpu上

    基本概念 cpu亲和性(affinity) CPU的亲和性, 就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,也称为CPU关联性:再简单的点的描述就将指定的进程或线程绑定到相应的 ...

  7. 10台服务器要淘汰上虚拟化,24核CPU还不够用?服务器虚拟PC性能小测

    1服务器整合的后遗症 最近几年间64位计算技术的普及和处理器厂商对虚拟化技术的加强支持对虚拟化技术的流行起了极大推动作用.时至今日,虚拟化技术在企业后台服务器上的应用已经很常见了.CIO也好,IT管理 ...

  8. 8核插上4G翅膀 MT6595借Cortex-A17领跑

    ARM是业界领先的微处理器技术提供商,提供最广泛的微处理器内核,可满足几乎所有应用市场对性能.功耗及成本的要求.再加上一个富有活力的生态系统(拥有1000多家可提供芯片.开发工具和软件的合作伙伴),A ...

  9. 4核cpu云服务器性能,4核cpu云服务器性能测试

    4核cpu云服务器性能测试 内容精选 换一换 虚拟IP地址用于为网卡提供第二个IP地址,同时支持与多个弹性云服务器的网卡绑定,从而实现多个弹性云服务器之间的高可用性.登录管理控制台.选择"计 ...

最新文章

  1. 怎么让电脑不自动休眠_【平安惠阳提醒您】电脑应设置自动休眠 避免产生火灾隐患...
  2. 解决: Unable to connect to zookeeper server within timeout: 5000
  3. 音视频开发(22)---基于RTMP推送实时AAC+H264流(三)
  4. mysql怎么退出电脑_mysql的登陆和退出命令格式
  5. Tensorflow初入门
  6. Python基础(map/reduce)
  7. RedisTemplate和StringRedisTemplate在项目中应用
  8. windows系统磁盘空间清理工具SDelete
  9. centos安装nginx配置webpy
  10. 注册微信小程序账号 APPID的获取
  11. 【java】临时文件
  12. memory exhausted mysql 42000 1064
  13. 傅里叶变换并把结果保存在excel文件中
  14. rdkit smiles支持和扩展
  15. python读取csv求平均数_python列表切片读取csv数据计算导购客单价.py
  16. 读入输出优化 黑科技 快过freadfwite
  17. Android Data Binding 详细介绍与使用
  18. Revit二开--批量修改视图范围(revit宏)
  19. 2020年全国软件业务收入将破8万亿元
  20. python中ceil函数是什么意思_python中ceil()函数用法

热门文章

  1. js对象数组赋值或者新增新对象
  2. GetCurrentProcess 伪句柄
  3. (转)redis常用命令及客户端的使用
  4. 论文里的好句子(7)
  5. 图像溯源,图血缘关系总结
  6. 浏览器因为代理打不开
  7. 慕课网_《如何使用高德云图在线制作属于你的地图》学习总结
  8. 失业的程序员(十三):团队平衡
  9. 通信协议演进与JCE协议详解
  10. linux输入法软件安装目录,Linux下的文件管理与汉语输入法的安装