任务并行库与本机线程同步

时间:2010-10-21 07:52:37

标签: c#

这个问题可能是主观的,但我只是想知道何时使用TPL以及何时使用基于本机线程的同步(evnts,等待句柄)。

本机线程同步技术将在未来过时吗?

由于

3 个答案:

答案 0 :(得分:4)

尽可能使用TPL,因为它是表达并行性需求的更清晰,更具声明性的方式。

MSDN解释“TPL动态扩展并发度以最有效地使用所有可用的处理器。此外,TPL处理工作的分区,ThreadPool上的线程调度,取消支持,状态管理和其他低级细节。通过使用TPL,您可以最大限度地提高代码的性能,同时专注于您的程序旨在完成的工作。“

另请参阅http://www.albahari.com/threading/part5.aspx,其中详细介绍了“数据并行”和其他TPL优势的好处。

答案 1 :(得分:1)

并行扩展适用于并行化小任务。并行扩展实际上提供了代码构造。例如,ForEach替换了正常的foreach语句,而是并行执行它。这就是并行扩展用于的目的。

当您创建完整的多线程应用程序(例如Web服务器)时,仍然必须使用正常的线程和同步。当然,WCF和IIS已经为您解决了这些问题。

当然,线程池可以解决这个问题。

答案 2 :(得分:1)

任务并行库主要不是用于线程同步,它旨在促进更多任务。 TPL旨在促进以下步骤:

  1. 将其分成小块。
  2. 通过多线程并行执行这些块。
  3. 以可线程安全且高效的方式整理结果。
  4. 只有第三项与线程同步有关。当然,您仍然可以使用已知的线程同步原语以线程安全的方式执行排序结果(例如,使用类Parallel,当您应该自己整理此结果时)。