鉴于托管在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构建应用程序时会出现此问题。
我很感激任何意见。
答案 0 :(得分:1)
没有。它将快速增长到这个数字,而不是从那么多线程开始。
请参阅ThreadPool.SetMinThreads的一部分我高调:
在切换到管理线程创建和销毁的算法之前,设置线程池根据需要创建的最小线程数,如新请求。