我对 .NET ThreadPool 的一个方面有点困惑:即,您如何知道它的“可用”线程中有多少是等待重用的空闲线程,还有多少尚未创建。
该GetAvailableThreads()
方法的摘要指出:
检索 GetMaxThreads 方法返回的最大线程池线程数与当前活动的线程数之间的差异。
任何“活动”线程都在忙于工作,因此无法重用,但有多少线程“可用”可重用,而“可用”是因为它们尚未创建?
我知道该GetMinThreads()
方法返回框架将在池中维护以供重用的绝对最小线程数,但这并不一定等于当前空闲线程的数量 - 是吗?我的印象是,空闲线程会在 ThreadPool 中徘徊,并且只有在它们闲置一段时间后才会被修剪到最低限度。
这很重要,因为根据文档:
当所有线程池线程都已分配给任务时,线程池不会立即开始创建新的空闲线程。为了避免不必要地为线程分配堆栈空间,它会每隔一段时间创建新的空闲线程。该时间间隔目前为半秒,但在 .NET Framework 的未来版本中可能会发生变化。
我想检查我的应用程序是否必须在池中创建过多的“新”线程 - 减慢它的速度 - 但我不确定如何做到这一点,而无法弄清楚有多少空闲,准备就绪-重用我闲逛的线程。
欢迎任何想法。谢谢!