【问题标题】:(How) Does TPL use (CLR) Thread Pool?(如何)TPL 是否使用(CLR)线程池?
【发布时间】:2011-05-30 21:48:07
【问题描述】:

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

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

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

【问题讨论】:

  • (顺便说一句,作为一个 SO 问题绝对没问题。)

标签: .net threadpool task-parallel-library


【解决方案1】:

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

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

【讨论】:

  • 这篇文章很有用,谢谢。我理解我困惑的原因:任务逻辑和工作窃取实际上是作为 TPL 的一部分设计的。但是实现是在线程池中。这将线程池演变为“具有工作窃取功能的池”。再次感谢。
猜你喜欢
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 2011-02-09
  • 2011-07-31
  • 2018-03-18
相关资源
最近更新 更多