.NET线程池应该在启动时创建最少量的工作线程吗?

时间:2016-04-28 21:06:02

标签: c# asp.net .net multithreading threadpool

鉴于托管在Windows Server 2008r2,IIS 7.5,集成池,.net 4.0 CLR,64位上的ASMX服务应用程序。它几乎是异步的,并广泛使用TPL库。

假设将.NET线程池最小工作线程配置为N会在启动时强制创建N个工作线程是否正确?

我期待这种行为,但它不会发生或间歇发生。

以下是配置的详细信息: Machine.config部分的属性'minWorkerThreads'设置为100,以初始化线程池,最小100 * CPUcount(假设4个核心桌面为400)工作线程。

服务应用程序启动ThreadPool之后。 GetMinThreads (输出minWorkerThreadsCount,输出minIoThreadsCount)按预期显示 minWorkerThreadsCount 为400

尽管如此,调试'线程'窗口仅显示60个线程与任务管理器相同。似乎线程池回退到默认行为,但 minWorkerThreadsCount 仍然是400。

关于什么可以触发此类行为或在运行时减少线程数的任何想法? 据称,在.NET 4.5运行时针对.NET 4.0构建应用程序时会出现此问题。

我很感激任何意见。

1 个答案:

答案 0 :(得分:1)

没有。它将快速增长到这个数字,而不是从那么多线程开始。

请参阅ThreadPool.SetMinThreads的一部分我高调:

  

在切换到管理线程创建和销毁的算法之前,设置线程池根据需要创建的最小线程数,如新请求