网站建设 软件开发,爱客crm网页版登录,做网站税费,官网传奇请先考虑一个典型的程序为什么需要启动一个子进程。(当然资源管理器不算一个典型的程序) 这是因为手头的任务被分解为子任务#xff0c;无论出于何种原因#xff0c;这些子任务都被放入子流程中。例如#xff0c;在实现多次遍历型编译器/链接器时#xff0c;其中每次遍历都…请先考虑一个典型的程序为什么需要启动一个子进程。(当然资源管理器不算一个典型的程序) 这是因为手头的任务被分解为子任务无论出于何种原因这些子任务都被放入子流程中。例如在实现多次遍历型编译器/链接器时其中每次遍历都作为管道中的单独进程实现。
现在考虑为什么你可能希望设置进程的亲缘性以将其限制为单个处理器。 一个原因是该进程可能存在导致其在多处理器计算机上崩溃或行为异常的错误。对于为单处理器版本的 Windows 编写的旧程序或多处理器计算机仍然非常昂贵时这很常见。
在这种情况下你会选择将在挂起状态下启动程序方法是将 CREATE_SUSPENDED 标志传递给 CreateProcess 函数然后将该进程的处理器亲缘性设置为单个处理器然后恢复进程的主线程。
但是如果问题出在你启动的进程的子进程中怎么办 由于你无法控制进程启动其子进程的方式因此无法潜入并设置子进程的亲缘性。
这就是处理器亲缘性需要在子进程中被继承的原因如果在父进程上设置了亲缘性这个设置将会应用到该进程可能作为其执行的一部分启动的所有子进程。
可能希望设置进程亲缘性的另一个原因是限制 CPU 使用率。 (例如你可以将 CPU 密集型应用程序限制为双处理器计算机的单个处理器。) 同样如果进程启动子进程则希望这些子进程受到与其父进程相同的限制以便整个任务仍仅限于单个处理器。
这就是子进程继承处理器亲缘性的原因因为它几乎总是你所想期待的行为。
总结
工作中我很少涉及处理器亲缘性方面的内容可能我的程序没有达到有必要使用它们的量级吧。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一里面有很多关于Windows的小知识对于广大Windows平台开发者来说确实十分有帮助。 本文来自《Why is processor affinity inherited by child processes?》