2013-10-24 32 views
0

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

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

回答

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,它里面有一大堆好评的项目,这有助于解释很多并行编程的概念。