何时回收线程池中空闲线程(.net)

看书或是查看资料时,都会看到类似于这样一句话:线程池大量空闲线程将在一段时间后自己醒来终止自己以释放资源。那真实的情况是这样吗,现在就来证明一下:

一、代码

通过代码进行验证,代码很简单,只包含三个函数,如下:

1:Main()函数:

  1. 记录启动程序后,最初的线程数 ;
  2. 记录启动线程池后的线程数 ;
  3. 记录随着时间的推移,线程数的变化;

何时回收线程池中空闲线程(.net)_第1张图片

2:StartThreadpool()函数

  1. 通过Task.Run()启动线程池
    何时回收线程池中空闲线程(.net)_第2张图片

3:GetThreadCount()函数

  1. 获取进程中所有线程数
    何时回收线程池中空闲线程(.net)_第3张图片

二、执行结果

一共执行了两遍。程序启动后线程数是7,启动线程池后线程数是15,随着时间的推移,线程数逐渐变少,从 15 变成了7。
何时回收线程池中空闲线程(.net)_第4张图片
何时回收线程池中空闲线程(.net)_第5张图片

三、结论

1:线程池中大量空闲线程将在一段时间后终止。
2:释放线程时间间隔不固定,有的时候是1秒多,有的时候18秒多,有的时候是39秒多,有的时候是几十多毫秒。
3:随着时间的推移,线程池中的线程都会被释放。

你可能感兴趣的:(.net技术原理)