限制线程池中使用的处理器数量

2023-11-30

有没有办法限制 ThreadPool 对象将使用的处理器数量?根据文档,“您不能将工作线程数或 I/O 完成线程数设置为小于计算机中处理器数的数字。”

那么如何限制我的程序不消耗所有处理器呢?


经过一些实验,我想我已经做到了。我注意到ThreadPool将系统中的处理器数量视为当前进程可用的处理器数量。这对你有利。

我的 CPU 有 4 个核心。尝试打电话SetMaxThreads with 2:

ThreadPool.SetMaxThreads(2, 2);

失败,因为我有 4 个核心,因此数字保持其初始值(我的系统为 1023 和 1000)。

然而,正如我一开始所说的,ThreadPool只考虑进程可用的处理器数量,我可以使用它来管理Process.ProcessorAffinity。这样做:

Process.GetCurrentProcess().ProcessorAffinity = new IntPtr(3);  

将可用处理器限制为前两个内核(因为二进制中 3 = 11)。呼唤SetMaxThreads again:

ThreadPool.SetMaxThreads(2, 2);

应该像魅力一样发挥作用(至少对我来说是这样)。只需确保在程序启动时使用亲和力设置即可!

当然,我不鼓励这样做hack,因为无论如何,您的进程在整个执行期间都会被有限数量的核心所困扰。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

限制线程池中使用的处理器数量 的相关文章

随机推荐