如果可能的话,我确实希望为一个进程专门分配一个逻辑核心。
我知道Winbase.h包含Get / SetProcessAffinityMask和SetThreadAffinityMask。
当特定进程启动时,我可以使所有进程运行,并将它们的关联性设置为其他逻辑核心,但是,我不想定期检查所有进程,例如为了处理在启动特定进程后启动的进程。开始我的过程。
此外,还有其他进程仅需要专门使用特定的逻辑核心(没有其他进程会浪费该逻辑核心上的资源)。例如,我的进程将在核心15上运行,而另一个进程将仅在核心14上运行。
与上面提到的Get / SetProcessAffinityMask方案相比,有没有更好,更永久的方法来将特定的逻辑核心分配给特定的进程。
答案 0 :(得分:1)
Windows不是实时操作系统。 Windows旨在通过隔离的进程来进行抢占式多任务处理,基本上就像其他任何现代台式机操作系统一样。一个进程不应仅将某个其他进程锁定在一个特定的内核之外,因此,没有API可以明确地这样做(至少我不知道)。操作系统调度程序决定何时何地运行哪些线程。这就是整个想法。您可以使用thread priorities通知调度程序,应为某些线程提供运行其他线程的机会。您可以使用affinity masks告诉调度程序可以将线程调度到哪个内核。您甚至可以set a preferred core for your thread。但是您不必自己安排线程。
请注意,显然有一种方法可以使您获得与Linux上类似的东西(有关更多信息,请参见this question)。我认为Windows上不存在类似的可能性。是的,您可以尝试基于后台任务汇总一些解决方案,该任务可以连续监视和调整系统中所有线程的优先级和相似性掩码以近似所需的行为(例如the question linked by Ben Voigt above中的人显然已经尝试过,并未能实现)。但是为什么要这么做呢?它完全违背了Windows之类的OS所设计的所有特性。对我来说,您要问的听起来很像您真正要寻找的是完全不同的操作系统,或者甚至根本没有操作系统。直接将CPU引导到您自己的映像中,然后您就可以用自己喜欢的任何方式来驱动所有内核了……