TPL的优点是什么?

时间:2011-03-12 06:57:34

标签: multithreading multicore task-parallel-library

我已完成此POC并验证当您创建4个线程并在四核计算机上运行它们时,所有核心都会忙碌 - 因此,CLR已经在不同核心上有效地调度线程,那么为什么类TASK?

我同意Task简化了线程的创建和使用,但除此之外呢?它只是线程和线程池的包装对吗?或者它是否以某种方式帮助调度多核计算机上的线程?

我正在特别关注那些在2.0线程中没有任务的多核的任务。

3 个答案:

答案 0 :(得分:2)

  

“我同意Task简化了线程的创建和使用”

还不够吗?是不是神话般的它提供了更高级别的构建块,以便我们凡人可以构建无锁的多线程代码,这是安全的,因为真正聪明的人像Joe Duffy一样为我们完成了工作?

如果TPL真的只是一种开始一项新任务的方式,那就不会有太多用处 - 偷工作等很好,但对我们大多数人来说可能并不重要。它是围绕任务的构建块 - 特别是围绕“未来”的概念 - 它提供了价值。你真的想自己写Parallel.ForEach吗?您想要了解如何有效地执行分区吗?我知道,如果尝试这样做,那将需要我很长时间,而且我肯定会比PFX团队做得更差。

开发方面的许多进步并不是为了能够做出以前不可能做到的事情 - 他们一直在提高抽象级别,以便一旦可以解决问题。然后重新使用该解决方案。你对CLR本身有同感吗?您可以自己在汇编中做同样的事情,显然......但是通过提高抽象级别,CLR和C#可以提高我们的工作效率。

答案 1 :(得分:1)

虽然您可以在TPL或线程池中等效地执行所有操作,但为了更好的抽象和可伸缩性模式,TPL优先于Threadpool。但这取决于程序员,如果您确切知道自己在做什么,并根据您的计划和同步要求在您的特定应用程序中发挥作用,则可以更有效地使用Threadpool。你可以通过TPL获得免费的一些东西,你需要在使用Threadpool时进行编码,就像我现在想的那样。

答案 2 :(得分:0)

TPL允许您根据任务而非线程进行编程。将任务仅仅视为更好的线程抽象将是一个错误。任务允许您指定要执行的工作而不是您希望如何执行工作(线程)。这允许您表达应用程序的潜在并行性,并让TPL运行时 - 调度程序和线程池 - 处理该工作的执行方式。这意味着TPL将为您的应用程序带来很多负担,确保在具有不同内核数量的各种硬件上实现最佳性能。

例如,TPL可以轻松实现关键的几种设计模式,使您能够表达应用程序的潜在并行性。

http://msdn.microsoft.com/en-us/library/ff963553.aspx

与Futures(Jon提到)以及管道和并行循环一样。