5
在C#
中设置ThreadPool
的适当方法是什么?我想要的线程数量等于处理器内核的数量,但我不确定异步I/O线程(第二个参数)。C#线程数
我可以简单地说一些像ThreadPool.SetMaxThreads(Environment.ProcessorCount, 0)
这样的O/S本身推导出第二个参数吗?
在C#
中设置ThreadPool
的适当方法是什么?我想要的线程数量等于处理器内核的数量,但我不确定异步I/O线程(第二个参数)。C#线程数
我可以简单地说一些像ThreadPool.SetMaxThreads(Environment.ProcessorCount, 0)
这样的O/S本身推导出第二个参数吗?
的最大完成端口线程由异步的任务,如Socket.Begin*
或Socket.*Async
和其它IO相关的任务使用。我会建议,如果你改变了工作线程,那么你应该检查什么是完成线程的当前的最大号码之前更改值:
int maxWorkerThreads;
int maxCompletionThreads;
// Get the maximum number of completion threads
ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxCompletionThreads);
// Set the new max worker threads, but keep the old max completion threads
ThreadPool.SetMaxThreads(someDifferentValue, maxCompletionThreads);
我认为,在默认情况下完成的最大线程数是1000,但这可能因机器而异。为了安全起见,请使用从GetMaxThreads
函数获得的值。
你为什么要这样做?线程池*已经*根据它运行的机器为你优化了它的大小 - 我认为你可以做得更好。 – BrokenGlass 2011-04-26 22:38:44
@BrokenGlass同意。但是,例如,如果我必须将最大线程数更改为'something!= core count',那么我应该如何处理第二个参数呢? – 2011-04-26 22:39:41