当前位置: 首页 > news >正文

为什么子进程要继承处理器亲缘性?

请先考虑一个典型的程序为什么需要启动一个子进程。(当然资源管理器不算一个典型的程序)
这是因为手头的任务被分解为子任务,无论出于何种原因,这些子任务都被放入子流程中。例如,在实现多次遍历型编译器/链接器时,其中每次遍历都作为管道中的单独进程实现。

现在考虑为什么你可能希望设置进程的亲缘性以将其限制为单个处理器。
一个原因是,该进程可能存在导致其在多处理器计算机上崩溃或行为异常的错误。对于为单处理器版本的 Windows 编写的旧程序或多处理器计算机仍然非常昂贵时,这很常见。

在这种情况下,你会选择将在挂起状态下启动程序,方法是将 CREATE_SUSPENDED 标志传递给 CreateProcess 函数,然后将该进程的处理器亲缘性设置为单个处理器,然后恢复进程的主线程。

但是,如果问题出在你启动的进程的子进程中怎么办?
由于你无法控制进程启动其子进程的方式,因此无法潜入并设置子进程的亲缘性。

这就是处理器亲缘性需要在子进程中被继承的原因:如果在父进程上设置了亲缘性,这个设置将会应用到该进程可能作为其执行的一部分启动的所有子进程。

可能希望设置进程亲缘性的另一个原因是限制 CPU 使用率。 (例如,你可以将 CPU 密集型应用程序限制为双处理器计算机的单个处理器。)
同样,如果进程启动子进程,则希望这些子进程受到与其父进程相同的限制,以便整个任务仍仅限于单个处理器。

这就是子进程继承处理器亲缘性的原因:因为它几乎总是你所想期待的行为。

总结

工作中我很少涉及处理器亲缘性方面的内容,可能我的程序没有达到有必要使用它们的量级吧。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Why is processor affinity inherited by child processes?》

 

http://www.lryc.cn/news/4590.html

相关文章:

  • 【算法】高精度
  • 计算机网络-基本概念
  • 你评论,我赠书~【哈士奇赠书 - 13期】-〖Python程序设计-编程基础、Web开发及数据分析〗参与评论,即可有机获得
  • 【设计模式】我终于读懂了代理模式。。。
  • 每天10个前端小知识 【Day 2】
  • 帮助中心在线制作工具推荐这4款,很不错哟!
  • rabbitMQ相关文章汇总
  • 【C++】异常
  • @Validated注解不生效问题汇总
  • 华科万维C++章节练习2_4
  • 17万字数字化医院信息化建设大数据平台建设方案WORD
  • Android 11系统签名修改
  • 亚马逊、沃尔玛卖家自养号退款经验和测评技术
  • Spring Security in Action 第十一章 SpringSecurity前后端分离实战
  • 高级前端二面vue面试题(持续更新中)
  • 七大设计原则之依赖倒置原则应用
  • Dubbo面试题2023
  • Swift(5)
  • [Java 进阶面试题] CAS 和 Synchronized 优化过程
  • 算法思想 - 贪心算法
  • 解决需求变更难题的8大方案
  • NSSROUND#8[Basic]
  • Vue3代码初体验找不同
  • opencv调取摄像头录制
  • html标签手册
  • SpringMVC--视图、RESTful案例、处理AJAX请求
  • 一个同学升了leader,今年活还没干,他就已经想好组里成员的两次绩效考核怎么打了,还说:leader都是这样的!...
  • Docker 面试知识点
  • C++高级篇学习笔记
  • gentoo基本安装过程