也谈.net线程池
最近忙于系统的优化,同时也涉及到.net 线程池,关于.net 线程池的介绍很多,但在使用的过程中发现一些问题,和MSDN、网上介绍的并不一致:
一、线程池的默认设置
先看看微软官方的说法:
requestQueueLimit 默认值为 5000。
jeffer richer 说明
.net 2.0 每CPU25个线程,同时不建议修改默认配置 ,而且网上很多人也认为是25个,但我没有测出这个结果.
我测试的情况:
我机器为双核 ,autoconfig="true"
windows Application :
最大线程数: 500
最小
最大IO数:1000
web Application:
最大线程数为:200
最大IO数:1000
测试方法:
说明:根据测试的确最小线程数和MSDN上所述一致,默认为1;但最大线程数应该为:windows应用(cpu数*250),web应用(cpu数*100) ,所以如果autoconfig="true" 最大线程数并不是20,也不是25,而是100,在不同的机器上测试的结果一致。
二、优化的意义
按照官方的说法,线程的创建要耗费大量的系统资源,所以当用户访问量极大时,应该提高minWorkerThreads数和其它的配置, 将autoconfig="false"
修改为假,同时指定maxWorkerThreads="20" minWorkerThreads="10" ,同时在上述代码中将线程休眠5秒,压500并发,在测试的后半段发现可用线程数(最大线程数-已用线程数)达到9个左右,当停止并发后,要过一段可用线程数才能恢复,本来认为设定范围较大,又进行了重新设置将maxWorkerThreads="10" minWorkerThredad="5",又压了一次,发现可用线程数维持在7左右,并没有耗尽,所以初步认为ThreadPool内部有自己的保护机制,可用线程数要预留一定数量以应对其它的处理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?