C#螺纹数
在C#螺纹数,c#,multithreading,parameters,threadpool,C#,Multithreading,Parameters,Threadpool,在C#中设置线程池的适当方法是什么 我希望线程数等于处理器内核数,但我不确定异步I/O线程(第二个参数) 我可以简单地说一些类似于ThreadPool.SetMaxThreads(Environment.ProcessorCount,0)的东西,以便O/S推断第二个参数本身吗?最大完成端口线程由异步任务使用,例如Socket.Begin*或Socket.*Async和其他与IO相关的任务。我建议,如果您更改工作线程,那么您应该在更改值之前检查当前最大完成线程数: int maxWorkerThr
C#
中设置线程池的适当方法是什么
我希望线程数等于处理器内核数,但我不确定异步I/O线程(第二个参数)
我可以简单地说一些类似于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同意。但是,如果,例如,我必须将最大线程数更改为something!=核心计数
,我应该如何处理第二个参数?
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);