14_第十四章_写并行函数式程序

14 第十四章 写并行函数式程序

 

本章介绍

■ 用不可变数据简化并行化(parallelization)

■ 处理任务并行库(Task Parallel library)

■ 用 LINQ 以声明方式表达并行度(parallelism)

■ 实现重载(overloaded)运算符

 

    我们已经看到,许多赞成函数式编程的论据。原因之一就是,并行度现在变得越来越重要。写可以适应大量核心的代码,与使用典型的命令式方法相比较,以函数风格容易得多的。

    来自函数世界的两个概念是本质,并行计算是声明性的编程风格,使用不可变的数据结构,这两者密切相关。当使用不可变的数据时,代码变得更具声明性,因为,这样的代码更关心预期的计算结果,而不是复制和改变数据的细节。两个概念都很重要,是以不同的方式达到并行化。

    声明风格可以让大部分使用集合的代码的并行很简单,因为,声明风格不指定代码如何运行。这意味着,我们花很小的工作量,用并行执行替换顺序执行。不可变的数据结构和无副作用的函数是重要的,因为当代码不包含副作用的时候,我们可以轻松地确定哪些代码不相互依赖。一旦我们做到了这一点,就可以使用基于任务的并行度以并行的方式运行代码段。C# 和 F# 还都可以使用可变的数据类型。第 10 章,我们学习过可以隐藏这种可变状态,使整个程序成为函数式。在某些情况下,例如,当以某种方式处理数组时,这种隐藏命令隔离的代码,也可以很容易并行化。

    你可以看到有很多需要探索。我们首先简要概述演示所有这些技术,并解释每一个的用途。之后,看两个更复杂的示例应用程序,展示并行的函数式编程如何适合大的规模。无法在一章中容纳代码的两个完整的实际示例的代码,所以,在本书中,我们会忽略了一些意义不大的细节。我们会特别关注架构方面,和直接与并行相关的领域。从本书的网站可以获取完整源的代码,其中补充了缺少的部分。

你可能感兴趣的:(编程,声明,程序,library,休闲)