14.1 理解不同的并行技术

来源:互联网 发布:股票股软件开发 编辑:程序博客网 时间:2024/06/01 18:55
14.1 理解不同的并行技术



    在这一节中,我们会讨论三种技术,并使用简单的示例来演示。我们将使用 .NET 的并行扩展(Parallel Extensions to .NET),这是一个并行编程库。它是 .NET Framework 4.0 标准的一部分,但是,不幸的是,在早期 .NET 的版本中是不可用的。如果要使用 Visual Studio 2008,体验并行扩展,你可以下载 CTP 版本,但有几个命名的改变(实际上,Visual Studio 2010 应该没有这个问题了。)。





.NET 的并行扩展(Parallel Extensions to .NET)



    这个库包括两个主要部分组成,我们在这一章中会用到。

    ■ 任务并行库 (Task Parallel Library,TPL),包括基础结构,可以并行执行的任务(基本工作单元,primitive units of work)。TPL的另一个组件允许创建常见计算任务,比如 for 循环。

    ■ 并行 LINQ (Parallel LINQ,PLINQ),可以用于写数据并行代码。这是处理大量的数据的代码,使用相同的算法。

    用于并行执行任务的底层技术,以完全托管的代码实现,使用了源自微软研究院(MSR)的先进技术。它使用动态工作分配,即,任务分为到工作线程之间,取决于线程的可用性。一旦线程完成分配给自己的任务,就可以从其他线程中启动"窃取(stealing)"任务,所以,工作将均匀分布在所有可用的处理器或核心之间。任务存储在队列中的每个工作线程,这也大大降低所需的同步和锁定的实现。



    让我们从在介绍中提到的特定技术:对使用数组的命令式代码进行并行化开始,这与不允许有任何副作用的纯函数式语言不相关,但正如我们在第 10 章所看到的,以函数风格使用数组,在 C# 和 F# 中是很有用的技术,