【发布时间】:2013-10-24 19:17:00
【问题描述】:
我在 MSDN 中读到不能保证 TPL(任务并行库)将并行运行逻辑/代码。所以我的问题是,在什么情况下代码会顺序运行?
何时将代码部署到单核处理器中?或者当 .Net 框架线程池饥饿发生时?或者当“硬件线程”/“逻辑核心”太忙而无法分配一个“硬件线程”/“逻辑核心”时?
【问题讨论】:
标签: c# .net multithreading task-parallel-library
我在 MSDN 中读到不能保证 TPL(任务并行库)将并行运行逻辑/代码。所以我的问题是,在什么情况下代码会顺序运行?
何时将代码部署到单核处理器中?或者当 .Net 框架线程池饥饿发生时?或者当“硬件线程”/“逻辑核心”太忙而无法分配一个“硬件线程”/“逻辑核心”时?
【问题讨论】:
标签: c# .net multithreading task-parallel-library
由 TPL 方法的TaskScheduler set in the ParallelOptions 决定。这使您可以轻松地将 TaskScheduler 替换为 a custom one,它可以执行您想要的任何计划。
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,里面有一大堆注释很好的项目,有助于解释并行编程的很多概念。
【讨论】: