BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Jonathan Allen 关注 530 他的粉丝 ,译者 王波 关注 0 他的粉丝 发布于 2010年5月23日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

虽然从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
 

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT