2010-10-21 17 views
5

这个问题可能是主观的,但我只想知道什么时候使用TPL以及何时使用本地线程的同步(evnts,等待句柄)。任务并行库vs原生线程同步

本地线程同步技术会在未来过时吗?

谢谢

回答

4

使用TPL的地方,因为它是一种更清晰,更具说明性的方式来表达您的并行性需求。

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

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

1

并行扩展很适合并行化小任务。并行扩展确实提供了代码结构。例如ForEach替换了正常的foreach语句,而是将它们并行执行。这是平行扩展旨在用于的级别。

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

当然,有线程池解决的中间地带。

1

任务并行库不主要用于线程同步,它设计用于实现更多任务。 TPL旨在便于执行以下步骤:

  1. 将其分成小块。
  2. 通过多线程并行执行这些块。
  3. 以线程安全和高性能的方式在结果可用时对结果进行整理。

只有第三项与线程同步有关。当然,您仍然可以使用已知的线程同步原语以线程安全的方式执行归类结果(例如,当您应该自行整理此结果时,使用类Parallel)。