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

问题描述 投票:0回答:1

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

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

我可以在特定进程启动时运行所有进程并将其与其他逻辑核心设置为亲和关系,但是,我不想以定期方式检查所有进程,例如为了处理启动后启动的进程处理。

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

除了上面提到的Get / SetProcessAffinityMask方案之外,是否有更好,更永久的方法将特定逻辑核分配给特定进程。

c++ windows multithreading
1个回答
1
投票

Windows不是实时操作系统。 Windows旨在通过独立的进程执行抢占式多任务处理,就像任何其他现代桌面操作系统一样。一个进程不应该只是从特定的核心锁定所有其他进程,因此,没有API明确这样做(至少我不知道一个)。由OS调度程序决定哪些线程可以在何时何地运行。这就是整个想法。您可以使用thread priorities告诉调度程序某些线程应该有机会运行其他线程。您可以使用affinity masks告诉调度程序可以将线程调度到哪些内核。你甚至可以set a preferred core for your thread。但是你不能自己安排线程。

请注意,显然有一种方法可以让你有点喜欢在Linux上工作的东西(有关更多信息,请参阅this question)。我不认为Windows上存在类似的可能性。是的,您可以尝试基于后台任务一起破解一些解决方案,该后台任务持续监视和调整系统中所有线程的优先级和亲和力掩码,以逼近所需的行为(就像the question linked by Ben Voigt above中的人显然已经尝试过,并且未能实现)。但是你为什么要那样做呢?它完全违背了像Windows这样的操作系统的所有功能。对我来说,你所问的听起来很像你真正想要的是一种完全不同的操作系统,甚至可能根本就没有操作系统。将CPU直接引导到您自己的映像中,您可以以任何您喜欢的方式驱动所有核心...

© www.soinside.com 2019 - 2024. All rights reserved.