2011-03-12 24 views
2

我这样做POC和验证,当你创建4个线程,四核的机器上运行它们,所有的内核忙碌起来 - 所以,CLR已调度线程在不同的内核有效,那么为什么课堂任务?有什么了不起TPL

我同意任务简化了创建和使用线程,但除此之外呢?它只是一个围绕线程和线程池的包装?还是以某种方式帮助调度多核机器上的线程?

我specifially在看什么与任务WRT多在2.0线程wasnt那里。

+0

随着TPL你不需要写所有的线程代码。 – Pradeep

回答

1

虽然你可以在TPL或线程池做的一切等效,为更好的抽象性和可扩展模式TPL优于线程池。但是这取决于程序员,如果你确切地知道你在做什么,并且根据你的具体应用程序中的日程安排和同步要求,你可以更有效地使用Threadpool。有些东西你可以用TPL免费获得,你必须在使用Threadpool时进行编码,就像我现在可以考虑的那样。行动

2

“我同意任务简化线程的创建和使用”

是不是足够?是不是神话般,它提供了更高级别的积木,使我们凡人可以建立无锁的多线程代码,因为真的聪明的人喜欢乔·达菲为我们所做的工作是安全的吗?

如果TPL真的只是包括了开始新任务的一种方式,它不会有太大的用途 - 的工作窃取等等是好的,但可能并不重要,以我们大多数人。这是积木任务 - 特别是围绕“未来”的想法 - 提供价值。你真的想自己写Parallel.ForEach吗?你想要制定出如何有效地进行分区吗?我知道如果试图这样做,这将花费我很长一段时间,我肯定比PFX团队做得更差。

很多开发进展并没有使得有可能做一些前所未有的事情 - 他们一直在提高抽象级别,以便解决一个问题一次,然后重新使用该解决方案。你对CLR本身有同样的感受吗?显然,你可以在组装时自己做同样的事情,但通过提高抽象层次,CLR和C#使我们更有成效。

0

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

例如,TPL可以很容易地实现关键的设计模式,让你表达你的应用程序的潜在的并行。

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

期货等(由Jon提到的),以及管道和并行循环。

+0

你制作的视频 - http://www.msteched.com/2010/NorthAmerica/ARC205真是太棒了。 –