0

我在 MSDN 中读到不能保证 TPL(任务并行库)将并行运行逻辑/代码。所以我的问题是,在什么情况下代码将按顺序运行。?

何时将代码部署到单核处理器中?或者当 .Net 框架线程池饥饿发生时?或者当“硬件线程”/“逻辑核心”太忙而无法分配一个“硬件线程”/“逻辑核心”时?

4

1 回答 1

2

它由TPL 方法的 ParallelOptions 中设置的 TaskScheduler决定。这使您可以轻松地将 TaskScheduler 替换为可以执行任何您想要的瘫痪计划的自定义任务调度程序。

TPL 和 PLINQ 使用的默认调度程序是ThreadPool。它将首先使用一个线程,然后添加更多线程,因为它的算法检测到更多线程将是有用的(但是,如果您的任务不受 CPU 限制,该算法可能会做出一些不正确的假设并导致您出现问题)。

我强烈建议您阅读免费的并行编程模式一书,它对此进行了一些详细介绍。然而,我读过的最好的一本书详细介绍了任务调度器的工作原理,那就是《Professional Parallel Programming with C#》(第 8 章是关于线程池的)。

我还建议您下载带有 .NET 框架的并行编程示例包,其中包含大量注释良好的项目,有助于解释并行编程的许多概念。

于 2013-10-24T19:36:21.203 回答