fox*_*oxy 25 .net c# multithreading threadpool
我在使用.NET的ThreadPool(.NET 4)时遇到了一些麻烦.
我已经读过默认情况下.NET每个处理器有25个线程的限制,但根据SO和其他地方的论坛帖子,我可以使用下面的代码增加限制.
void SetThreads(int threads)
{
ThreadPool.SetMaxThreads(threads, threads);
ThreadPool.SetMinThreads(threads, threads);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我将上面的内容设置为某个任意高的数字(例如2000)和队列~1000个项目时,我仍然只有~33个线程在运行(.NET CLR需要约5个线程),并ThreadPool.GetAvailableThreads()
返回剩余的1971个线程.
为什么上面的代码不起作用?
Jon*_*eet 81
首先,您对默认值的"了解"是不正确的.每个处理器25个线程的限制是从.NET 1.1回来的.它在.NET 2中有所增加,现在:
从.NET Framework版本4开始,进程的线程池的默认大小取决于多个因素,例如虚拟地址空间的大小.进程可以调用GetMaxThreads方法来确定线程数.
但是,还有其他的东西在起作用:线程池不会立即在所有情况下创建新线程.为了应对小任务的爆发,它限制了创建新线程的速度.IIRC,如果有未完成的任务,它将每0.5秒创建一个线程,直到最大线程数.我不能立即看到这个数字,但它可能会改变.我强烈怀疑这是你所看到的.尝试排队很多项目,然后监视一段时间内的线程数.
归档时间: |
|
查看次数: |
47897 次 |
最近记录: |