首页 > 系统相关 >为什么子进程要继承处理器亲缘性?

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

时间:2023-02-18 13:04:28浏览次数:33  
标签:继承 程序 亲缘 Windows 处理器 设置 进程


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

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

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

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

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

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

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

总结

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

最后

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

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

 

标签:继承,程序,亲缘,Windows,处理器,设置,进程
From: https://blog.51cto.com/u_15805075/6065390

相关文章

  • 嵌入式ARM设计编程(三) 处理器工作模式
    文章和代码已归档至【Github仓库:​​hardware-tutorial​​】,需要的朋友们自取。或者关注公众号【AIShareLab】,回复嵌入式也可获取。一、实验目的(1)通过实验掌握学会使用m......
  • SpringMVC11 - 异常处理器 ExceptionResolver
    异常处理器SpringMVC默认使用DefaultHandlerExceptionResolver,因此,会跳转到出现404、405等报错页面基于XML配置的异常处理SpringMVC提供了一个处理控制器方法执行过......
  • C++继承--公有继承
    C++继承--公有继承#include<iostream>#include<cstdio>usingnamespacestd;classStudent{//基类public:voidget_value();voiddisplay();private:intnu......
  • c++继承---私有继承
    私有继承   在声明一个派生类的时候将基类的继承方式指定为private的,称为私有继承,用私有继承方式建立的派生类称为私有派生类,其基类称为私有基类.私有继承中的......
  • JS原型链继承
    functionParent(){this.name='red';this.eat=function(){console.log('走这里了吗')}}Parent.prototype.start=function(){console.lo......
  • 第七章 类 Part5 继承
    继承引出继承点击查看代码classIndexPage{public: //网页头部 voidHeader(){ cout<<"网页头部!"<<endl; } //网页左侧菜单 voidLeftNavigation(){......
  • 模板的继承
    定义模板:layout.html{%loadstatic%}<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><linkrel="stylesheet"......
  • Python+Django(4):创建其他网页(模板继承)
    模板继承:1,修改主页父模板:抽取通用元素,在index.html同级目录下新建base.html<p><ahref="{%url'learning_logs:index'%}">LearningLog</a></p>{%blockcont......
  • 继承、多态 中那些你该知道的知识
    面向对象编程一、继承:二、多态:一、继承:有的时候客观事物之间就存在一些关联关系,那么在表示成类和对象的时候也会存在一定的关联。例如猫它是动物,就具有动物的基本属性......
  • SpringMVC源码(六):Handler处理器
    在MVC请求流程中,Handler处理器依赖于HandlerMapping组件。因此在处理客户端请求时,会优先获取HandlerMapping处理器。HandlerMapping组件主要作用是根据客户端的访......