繁体   English   中英

将特定的逻辑核心专门分配给Windows,C ++的特定进程

[英]Allocating specific logical cores to specific processes exclusively, Windows, C++

如果可能的话,我确实希望将逻辑核心专门分配给单个进程。

我知道Winbase.h包含Get / SetProcessAffinityMask和SetThreadAffinityMask。

当特定进程启动时,我可以使所有进程运行,并将它们的亲和性设置为其他逻辑核心,但是,我不想定期检查所有进程,例如为了处理启动我的主机后启动的进程。处理。

此外,还有其他进程仅需要专门使用特定的逻辑内核(没有其他进程会浪费该逻辑内核上的资源)。 例如,我的进程将在核心15上运行,而另一个进程将仅在核心14上运行。

是否有比上述Get / SetProcessAffinityMask方案更好,更永久的方法来将特定逻辑核心分配给特定进程。

Windows不是实时操作系统。 Windows旨在通过隔离的进程来进行抢占式多任务处理,基本上就像其他任何现代台式机操作系统一样。 一个进程不应仅将某个其他进程锁定在一个特定的内核之外,因此,没有API可以明确地这样做(至少我不知道)。 操作系统调度程序决定何时何地运行哪些线程。 这就是整个想法。 您可以使用线程优先级来告诉调度程序,应该为某些线程提供运行其他线程的机会。 您可以使用相似性掩码来告诉调度程序可以将线程调度到哪个内核。 您甚至可以为线程设置首选内核 但是您不必自己安排线程。

请注意,显然有一种方法可以使您获得与在Linux上工作一样的东西(有关更多信息,请参见此问题 )。 我认为Windows上不存在类似的可能性。 是的,您可以尝试基于后台任务汇总一些解决方案,该任务持续监控并调整系统中所有线程的优先级和相似性掩码以近似所需的行为(例如, 上面由Ben Voigt链接的问题中的人显然已经尝试,但未能实现)。 但是为什么要这么做呢? 它完全违背了Windows之类的OS所设计的所有特性。 对我来说,您要问的听起来很像您真正要寻找的是完全不同的操作系统,或者甚至根本没有操作系统。 将CPU直接引导到您自己的映像中,然后您就可以用自己喜欢的任何方式来驱动所有内核了……

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM