我目前正在研究任务并行库,我在哪里读到TPL实际上从CLR级开始使用线程池机制。我找不到任何文章证实这一信息。我知道,TPL为每个线程都有任务队列,并使用一些特殊的工作窃取算法来平衡。据我所知,它为每个处理器创建一个线程。线程池从.NET 4开始使用TPL的任务对象。
我不明白TPL是如何使用线程池的。线程池模式的状态是,工作项被排队,线程池中的空闲线程从这个队列中取出一个。然而,TPL将项目(任务)存储到线程队列中,如果需要的话,窃取工作...因此,完全不同。我的错误在哪里?
附加问题:由于这是我的第一个堆栈溢出问题,我不确定它是否合适。是吗?
1条答案
按热度按时间qeeaahzv1#
在TPL中,
TaskScheduler
负责将任务排队等待执行,Default调度器将使用线程池--但我相信实际上是新的线程池实现在窃取工作。丹尼尔Moth有一个blog post,其中包含了一些详细信息,您可能会发现这些信息很有用。