自微软首次宣布以来,我一直关注.NET任务并行库(TPL)的开发。
毫无疑问,我们最终将利用TPL。我在质疑的是,在Visual Studio 2010和.NET 4.0发布时是否有必要开始利用TPL,或者等待一段时间是否有意义。
答案 0 :(得分:8)
我现在就开始吧。我强烈怀疑我们已经看到了大部分的变化 - 即使候选版本中有一些调整,我相信它们会在PFX team blog中得到很好的记录,并且很容易改变。即使芯片发生变化,我也希望TPL能够在未来的版本中进行适当调整 - 我个人认为目前的TPL仍然可以比处理任何手工制作的线程代码更好地处理这些新芯片。我们可以写。
我现在看到的一个真正的缺点是学习资源还没有真正存在。有一些文档,一些博客文章(其中一些将在现在过时)和一些示例代码 - 但没有专门用于PFX的书籍。我相信这些会及时到来 - 如果你在游戏初期,你甚至可以写一个:)
根据您的应用程序,您可能还需要查看Reactive Extensions,它与PFX密切配合。
答案 1 :(得分:1)
最后,如果您的核心引擎一般可以从并行性中受益,那就更重要了。 是否有很多需要用锁保护的共享状态?如果这是真的,那么可以轻松地将其转移到以无锁数据结构为中心的设计中吗?
我认为必须首先回答这些问题,以便他们能够更清楚地了解TPL是否可以帮助我们做好准备。
答案 2 :(得分:1)
嗯 - 你今天反对使用TPL的主要原因似乎如下:
你不知道TPL是否会在未来的多核CPU中占据最大值。
我想说(这只是猜测 - 特别是在计算机科学中你永远无法分辨接下来会发生什么):是的,它们会改变。是的,TPL将在某些方面进行更改,以最大限度地提高性能。但是,一些变化将“引人注目” - 您将从优化中获益,而无需实际更改单行代码。
即使架构发生变化,只会在更改代码的组合中产生更高的性能:我认为这些更改不会影响整个代码 - 也许某些百分比是每一毫秒非常重要。
替代方案在哪里?使用Threadpool?好吧 - 然后TPL更新了。因此,使用它时,您的代码将更加面向未来。例如,VS 2010调试功能的演示看起来非常不错。
此外,TPL在我看来似乎非常灵活 - 如果它不适合特定情况,你不必在那里使用它。另一方面,它简化了其他地方的开发工作。
我认为今天最重要的是思考关于并行化并将其包含在架构中。 TPL使这个过程变得更加容易。
因此,我的结论是:使用它!
答案 3 :(得分:1)
我也会这样做。我认为最大的变化是“范式”从“我们在过去8年中这样做”的发展转变为更具功能性/副作用的自由编程。
如果你今天开始使用PFX,我猜它需要一些时间才能快速掌握它并从字面上移植你的代码以从中获得最大收益。 另一方面,如果PFX在2年内消失或带来重大变化,我希望你的代码仍能更好地运用你所能达到的目标。我们不会再次减少核心数量,而且要在一段时间内完成扩展的大任务也不会被淘汰。
关于CPU体系结构的变化:我无法对这些进行真正的评论,除了在我看来,您现在的投资将在+ X个月之后带来业务优势。 X可能小于CPU开发发生重大变化的时间 - >你赢了。
答案 4 :(得分:1)
我也不会等。
事实上,我会更进一步说不要等待VS2010 / .NET 4.0。 TPL现在可用于.NET 3.5,作为Reactive Extensions for .NET的一部分。