tuj*_*tuj 4 .net c# multithreading threadpool
有没有办法限制ThreadPool对象将使用的处理器数量?根据文档,"您不能将工作线程数或I/O完成线程数设置为小于计算机中处理器数量的数字."
那么如何限制我的程序不使用所有处理器呢?
经过一些实验,我认为我有这个东西.我注意到,将ThreadPool系统中的处理器数量视为当前进程可用的处理器数量.这对您有利.
我的CPU中有4个内核.试着打电话SetMaxThreads给2:
ThreadPool.SetMaxThreads(2, 2);
Run Code Online (Sandbox Code Playgroud)
失败,因为我有4个核心,所以数字保持在它们的初始值(我的系统为1023和1000).
但是,就像我最初所说的那样,ThreadPool只考虑了我可以使用的流程可用的处理器数量Process.ProcessorAffinity.这样做:
Process.GetCurrentProcess().ProcessorAffinity = new IntPtr(3);
Run Code Online (Sandbox Code Playgroud)
将可用处理器限制为前两个核心(因为3 = 11的二进制).SetMaxThreads再次打电话:
ThreadPool.SetMaxThreads(2, 2);
Run Code Online (Sandbox Code Playgroud)
应该像魅力一样工作(至少它对我有用).只需确保在程序启动时使用亲和力设置!
当然,我不会鼓励这种破解,因为无论如何,你的进程在整个执行期间都会遇到有限数量的内核.
| 归档时间: |
|
| 查看次数: |
3440 次 |
| 最近记录: |