C# 线程计数

6

C#中,如何适当地设置ThreadPool

ThreadPool.SetMaxThreads(int workerThreads, int completionPortThreads)

我希望线程数等于处理器核心数,但我不确定异步I/O线程(第二个参数)。

我可以简单地说像ThreadPool.SetMaxThreads(Environment.ProcessorCount, 0)这样的话,让操作系统自己推断第二个参数吗?


2
你为什么想要这样做呢?线程池已经根据运行的机器优化了其大小 - 我认为你无法做得更好。 - BrokenGlass
@BrokenGlass 同意。不过,例如,如果我必须将最大线程数更改为“something != core count”,那么第二个参数该怎么办? - Yippie-Ki-Yay
1个回答

7

最大完成端口线程用于异步任务,如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函数获取的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接