有一天突然发现生产环境单个服务的线程数很多,如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201017224829983.png#pic_center)
因此我想到了两个问题,第一:为什么同时存在这么多线程?第二:线程是怎么产生的?
一.为什么同时存在这么多线程?
1:通过windbg分析dump文件,使用命令!threadpool查看,可以看到存在大量空闲线程:
2:用命令!threads查看线程,如下图,存在大量的MTA(Threadpool worker),这样的线程就是空闲线程。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201017225203733.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pqcGRkMTAyMw==,size_16,color_FFFFFF,t_70#pic_center)
切换到任意一个线程,我选择了212这个线程,用命令!dumpstack输出堆栈信息,可以看到线程最后调用的是WaitForSingleObject,此方法的意思就是等待信号,触发线程执行。