(如何)TPL使用(CLR)线程池?

eks*_*eks 12 .net threadpool task-parallel-library

我正在研究任务并行库,我在某处读到TPL实际上使用了CLR-Level的线程池机制.我找不到任何确认此信息的文章.我知道,TPL为每个线程都有任务队列,并使用一些特殊的工作窃取算法进行平衡.据我所知,它为每个处理器创建一个线程.自.NET 4以来,线程池开始使用TPL的任务对象.

我无法理解TPL如何使用线程池.线程池模式状态,工作项排队,线程池中的空闲线程从此队列中获取一个.然而,TPL将项目(任务)存储到线程队列中,并且如果需要的话,工作窃取工作......因此,完全不同.我的错误在哪里?

额外的问题:由于这是我的第一个Stack Overflow问题,我不确定它是否合适.是吗?

Jon*_*eet 10

在TPL中,a TaskScheduler负责实际将任务排队等待执行.该默认调度将使用线程池-但我相信它是新的线程池实现,实际上做的工作窃取聪明.

Daniel Moth有一篇博文,其中包含一些您可能会觉得有用的细节.

  • 这篇文章非常有用,谢谢.我理解我混淆的原因:任务逻辑和工作窃取实际上是作为TPL的一部分设计的.但实现是在线程池中.这个演进的线程池变成了"工作窃取池".再次感谢. (3认同)