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

时间:2010-12-26 17:59:23

标签: .net threadpool task-parallel-library

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

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

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

1 个答案:

答案 0 :(得分:10)

在TPL中,TaskScheduler负责实际排队执行任务。 Default调度程序将使用线程池 - 但我相信它是新的线程池实现,实际上可以实现工作窃取的聪明。

Daniel Moth有一个blog post,其中包含一些您可能会觉得有用的细节。