InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

.NET并行扩展之模式与范例

作者 Jonathan Allen 译者 王波 发布于 2010年5月22日

领域
架构 & 设计,
语言 & 开发
主题
.NET ,
并发 ,
协调数据结构 ,
PLINQ ,
性能和可伸缩性 ,
编程 ,
并行计算

虽然从2007年开始微软致力于.NET的并行扩展,但针对.NET 4.0的多项功能仍未充分实现。有些内部框架的功能“过于专属”,而其它功能则有利于测试与用户反馈。 Stephen Toub提到:

所幸的是大部分案例中,我们能够基于.NET 4提供的并行架构与.NET 4类型和方法来实现这项功能,并在其它案例中使用.NET 4提供的扩展功能,让开发人员能清晰地实现独立的自定义功能。久而久之,我们收集了大量的案例,我们选择把ParallelExtensionsExtras 作为.NET 4范例的一部分进行公布,大家可从http://code.msdn.microsoft.com/ParExtSamples下载。

代码范例涵盖了多种不同的功能。以下列出大家关心的部分功能:

IProducerConsumerCollection实现了BlockingCollection封装。该接口是用于传统厂商与客户解决方案的线程安全集合。它并不包含在.NET 4.0当中,因为不同应用程序对BlockingCollection有不同的需求。

对于处理COM组件所需的单线程单元,微软提供了StaTaskScheduler。StaTaskScheduler的入门版本简单易用,它启用若干预定义的STA线程并等待处理任务。微软推荐用户使用本地线程存储来给每个工作线程实例化COM对象。

对于Rx Framework感兴趣的开发人员,可以参考Task.ToObservable扩展方法。它可订阅Task的结果。如果该订阅在任务完成之前就被丢失,那么该任务也会被取消。

一个相对复杂的解决方案就是ReductionVariable。它包含一些值,与实例或线程一一对应,在归约操作中使用。基于本地线程的存储,减少了它在工作线程间同步的比例。归约操作一旦完成,就可以对这些值进行枚举来生成最终结果。

查看英文原文:Patterns and Samples for .NET Parallel Extensions
 

译者 王波 是匆匆IT过客,涉足于.NET编程技术,潜心研究和译书,与友人共译《C# 3.0揭秘》 。