为什么子进程要继承处理器亲缘性?
请先考虑一个典型的程序为什么需要启动一个子进程。(当然资源管理器不算一个典型的程序)
这是因为手头的任务被分解为子任务,无论出于何种原因,这些子任务都被放入子流程中。例如,在实现多次遍历型编译器/链接器时,其中每次遍历都作为管道中的单独进程实现。
现在考虑为什么你可能希望设置进程的亲缘性以将其限制为单个处理器。
一个原因是,该进程可能存在导致其在多处理器计算机上崩溃或行为异常的错误。对于为单处理器版本的 Windows 编写的旧程序或多处理器计算机仍然非常昂贵时,这很常见。
在这种情况下,你会选择将在挂起状态下启动程序,方法是将 CREATE_SUSPENDED 标志传递给 CreateProcess 函数,然后将该进程的处理器亲缘性设置为单个处理器,然后恢复进程的主线程。
但是,如果问题出在你启动的进程的子进程中怎么办?
由于你无法控制进程启动其子进程的方式,因此无法潜入并设置子进程的亲缘性。
这就是处理器亲缘性需要在子进程中被继承的原因:如果在父进程上设置了亲缘性,这个设置将会应用到该进程可能作为其执行的一部分启动的所有子进程。
可能希望设置进程亲缘性的另一个原因是限制 CPU 使用率。 (例如,你可以将 CPU 密集型应用程序限制为双处理器计算机的单个处理器。)
同样,如果进程启动子进程,则希望这些子进程受到与其父进程相同的限制,以便整个任务仍仅限于单个处理器。
这就是子进程继承处理器亲缘性的原因:因为它几乎总是你所想期待的行为。
总结
工作中我很少涉及处理器亲缘性方面的内容,可能我的程序没有达到有必要使用它们的量级吧。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Why is processor affinity inherited by child processes?》
为什么子进程要继承处理器亲缘性?相关推荐
- Windows核心编程 第七章 线程的调度、优先级和亲缘性(下)
7.6 运用结构环境 现在应该懂得环境结构在线程调度中所起的重要作用了.环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方. 知道这样低层 ...
- 线程的调度、优先级和亲缘性——Windows核心编程学习手札系列之七
线程的调度.优先级和亲缘性 --Windows核心编程学习手札系列之七 每个线程都拥有一个上下文结构,在线程的内核对象中,记录线程上次运行时该线程的CPU寄存器状态.Windows会每隔20ms左右查 ...
- java 线程亲缘性_线程的调度、优先级和亲缘性
每隔20ms左右,Windows要查看当前存在的所有线程内核对象.在这些对象中,只有某些对象被视为可以调度的对象.Windows选择可调度的线程内核对象中的一个,将它加载到CPU的寄存器中,它的值是上 ...
- 进程/线程优先级,亲缘性
亲缘性的意思是 进程只在某个cpu上运行 ,比如 BOOL WINAPI SetProcessAffinityMask(_In_ HANDLE hProcess,_In_ DWORD_PTR dwPr ...
- CPU亲缘性及网卡中断绑定
#####编辑器依旧那么难用 难用 难用~~################ ################################################## CPU亲缘性及网卡中 ...
- Linux CPU亲缘性
创作人QQ:851301776,邮箱:lfr890207@163.com,欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点! 个人座右铭: 1.没有横空出世,只要厚积一定发. ...
- java 线程亲缘性_CPU affinity 进程和线程的亲缘性
设置Processor Affinity 作用: 1.进程和线程的亲缘性(affinity),使进程或线程在指定的CPU(核)上运行.(比如程序A,在第4个核心上运行) 2.设置进程 或者 线程, 使 ...
- Linux CPU亲缘性详解
前言 在淘宝开源自己基于nginx打造的tegine服务器的时候,有这么一项特性引起了笔者的兴趣."自动根据CPU数目设置进程个数和绑定CPU亲缘性".当时笔者对CPU亲缘性没有任 ...
- 【Linux系统编程】| Linux性能优化——CPU亲缘性
文章目录 一.CPU亲和性 1.1 使用场景 二.使用接口 测试 一.CPU亲和性 CPU亲和性又称CPU关联,可以映射到一个或多个CPU上.该技术基于对称多处理机操作系统中的native centr ...
最新文章
- python sched_python事件调度库sched
- selenium自动化测试多条数据选择第一条
- Java黑皮书课后题第6章:*6.21(电话按键盘)国际标准的字母/数字匹配图如编程练习题4.15所示。编写一个测试程序,提示用户输入字符串形式的电话号码。程序将字母(大写或小写)翻译成数字
- python如何强制转换数据类型_python数据类型强制转换实例详解
- 使用.NET开发的数据库小工具 DbTool
- 一文搞懂IT基础知识,讲通HTTP、TCP、IP、以太网
- 什么是 Python?我介绍我几年前学习Python的方法和经验
- 【Spark】Spark Class is not registered joins UnsafeHashedRelation kryo
- 网购组装电脑整机为什么便宜?
- 从矩阵与空间操作的关系理解CSS3的transform
- 每日一句20191224
- NFC卡模拟之模拟卡ID
- Redis分布式架构以及实战
- Failed to open the host Key database file
- token干什么用_token是什么意思,token身份验证使用方法流程
- linux服务器开机管理,中标麒麟Linux服务器操作系统启动管理(29页)-原创力文档...
- 净误差与遗漏为负值的含义_【双语】跳出“资本外逃”之争看净误差与遗漏
- python中leap是什么意思_您知道leap是什么意思吗?
- java+mysql+javaweb网上购物系统
- restfulApi相关