微软的模式与实践团队(pattern & practices team)最近发表了名为《使用.NET进行并行编程(Parallel Programming with Microsoft .NET)》的技术书籍,此书包含了为.NET编写并行程序的向导。其基本内容囊括了6个针对并行编程的设计模式,以及相应的代码示例。
《使用.NET进行并行编程》力图解决的并行程序中的艰难工作就是:在能够并行运行的多任务中分解问题,协调并行执行的任务,并处理任务间的数据共享来避免同步性的需要所带来的巨大性能影响。为了达成这个目的,本书介绍了6种使用.NET 4任务并行库(Task Parallel Library,TPL)和PLINQ的设计模式:
- 并行循环(Parallel Loops)——在需要对多个相似数据输入执行同样操作的时候使用。
- 并行任务(Parallel Tasks)——在需要执行每个都具有自己数据输入的不同操作的时候使用。
- 并行聚合(Parallel Aggregation)——“并行聚合在算法中引入了特别的步骤用于合并一些不完整的结果。这个模式表示着一种简化(reduction)操作,并包含了一种map/reduce算法的变体。”
- 期货(Futures)——用于通过控制流来集成数据流。“期货是最初未知但之后变得可用的计算结果的替代物。对结果进行计算的过程能并行地发生在其他计算过程当中。”
- 动态任务并行化(Dynamic Task Parallelism)——即所谓的递归分解,这个模式有助于在计算期间添加动态创建的任务。
- 管道(Pipelines)——这个模式把并行任务的概念和并发队列组合起来,让程序能在数据输入之上并发地执行任务,并遵循一定的顺序来处理数据。
每个设计模式都附带有C#、VB.NET和F#代码示例,都可以在CodePlex上的使用.NET进行并行编程的项目网站上找到。这个项目也提及,模式与实践团队有意为使用并行模式库(Parallel Patterns Library ,PPL)和异步代理库(Asynchronous Agents Library)的C++开发人员,编写此书的姐妹篇。
这个向导还包含了把并行设计模式和其他OOP模式进行集成的建议,如门面模式(Facades)、装饰模式(Decorators)和资源库模式(Repositiories)。并演示如何在Visual Studio 2010中调试和分析并行应用程序。