我有 1500 个线程..我希望它们在 12 个处理器上运行...
为此,我打电话
SetThreadAffinityMask(GetCurrentThread(),1<<(threadnum%numprocessors))
;其中 numprocessors=12。
面膜的使用方法正确吗?
它需要可扩展,也就是说,如果我希望它只在 11 个处理器上运行,那么
SetThreadAffinityMask(GetCurrentThread(),1<<(threadnum%numprocessors));
其中 numprocessors=11。
最佳答案
没错。
但是出于性能和效率的原因,我建议您以某种方式更改线程模型,使线程数等于 CPU 执行核心的数量,然后这些线程将处理您的 1500 个任务/工作项,这些任务/工作项由您的“任务管理器”。
如果你不想创建自己的“任务管理器”,你可以使用windows ThreadPool API ,您将任务分配给由 O/S 管理的“线程池”
关于c++ - SethreadAffinityMask() 正确用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5468270/