TPL按顺序执行代码

时间:2013-10-24 19:17:00

标签: c# .net multithreading task-parallel-library

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

当代码部署到单核处理器中时?或者.Net框架线程池饥饿发生时?或者当'硬件线程'/'逻辑核心'太忙而不能在那时只分配一个'硬件线程'/'逻辑核心'时?

1 个答案:

答案 0 :(得分:2)

由TPL方法的TaskScheduler set in the ParallelOptions决定。这样,您就可以轻松地将a custom one替换为可以执行任何您想要的平行化计划的TaskScheduler。

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

我强烈建议您阅读免费书籍Patterns for Parallel Programming,它会详细介绍这一点。然而,我读过的关于任务调度程序如何工作的很多细节的最好的书是Professional Parallel Programming with C#(第8章是关于线程池的)。

我还建议你下载包Samples for Parallel Programing with the .NET framework,它里面有很多评论很好的项目,这有助于解释很多并行编程的概念。