在这一节,我们将讨论三种技术,并使用简单的示例进行演示。我们将使用的 .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)”任务,所以,工作将在所有可用的处理器或内核之间均匀分布。任务以队列形式保存每个工作线程中,这也大大降低所需的同步和锁定的实现。
现在,我们介绍在概述中提到的内容:对处理数组的命令式代码进行并行化,这与纯函数式语言不相关,它不允许有任何副作用;但是,以函数风格处理数组,在 C# 和 F# 中都是很有用的技术,正如我们在第十章所看到的。
时间: 2024-10-08 04:40:37