【问题标题】:TPL executes code in sequentialTPL 顺序执行代码
【发布时间】:2013-10-24 19:17:00
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-02
      • 2012-04-21
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多