当前位置: 首页 > 编程语言 > C#

ThreadPool最大线程共享

时间:2023-04-10 17:53:30 C#

ThreadPool最大线程我在使用.NET的ThreadPool(.NET4)时遇到了一些问题。我读过.NET默认情况下每个处理器有25个线程的限制,但根据SO和其他地方的论坛帖子,我可以使用下面的代码增加限制。voidSetThreads(intthreads){ThreadPool.SetMaxThreads(threads,threads);ThreadPool.SetMinThreads(线程,线程);但是,当我将上面的值设置为任意高的数字(例如2000)和队列~1000时,当我开始一个项目和ThreadPool时,我仍然只运行~33个线程(.NETCLR需要~5个线程)。GetAvailableThreads()返回剩余的1971个线程。为什么上面的代码不起作用?来自MSDN:当需求低时,线程池线程的实际数量可能低于最小值。阅读本文:并行编程模式:使用.NETFramework4理解和应用并行模式首先,您对默认值的“了解”是错误的。每个处理器25个线程的限制是.NET1.1的延续。它在.NET2中有所增加,现在:从.NETFramework版本4开始,进程线程池的默认大小取决于多个因素,例如虚拟地址空间的大小。进程可以调用GetMaxThreads方法来确定线程数。但是,还有其他因素在起作用:线程池不会在所有情况下都立即创建新线程。为了应对小任务的爆发,它限制了可以创建新线程的速率。IIRC,如果有未完成的任务,它将每0.5秒创建一个线程,直到最大线程数。我无法立即看到该号码,但它可能会改变。我强烈怀疑这就是你所看到的。尝试排队大量项目,然后随时间监控线程数。首先检查此链接,尤其是这句话:如果托管公共语言运行时(例如,通过Internet信息服务(IIS)或SQLServer),主机可以限制或阻止更改线程池大小。然后你应该检查ThreadPool.SetMaxThreads(threads,threads)方法的返回值。也许它返回错误?以上就是C#学习教程:ThreadPool最大线程分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: