前言

前言

我从1989年开始攻读博士学位,在并行计算和分布式计算的领域深造,当时我便深信并发编程将成为主流。二十年后,我的观点终于得以验证——整个世界都在讨论多核以及如何发挥其优势。

学习并发不仅是为了利用多核来获得更好的性能。若正确使用并发,我们还能在程序的响应性、容错性、效率和简洁程度上获得大幅提升。

关于本书

本书延续了Pragmatic Bookshelf的七周系列丛书(《七周七语言》《七周七数据库》1《七周七网络框架》)的架构,通过七个精选的模型帮助读者了解并发领域的轮廓。这些模型中,一些已经成为主流,一些很快会成为主流,另一些虽难以成为主流,但在特定领域会威力无穷。当面对一个并发问题时,你可以借助本书准确选择合适的工具,这就是我的期望所在。

1本书中文版电子书在图灵社区有售:“http://www.ituring.com.cn/book/1369。——编者注

本书的每一章都设计成三天的阅读量。每天阅读结束都会有相关练习,巩固并扩展当天的知识。每一章均有复习,用于概括本章模型的优点和缺陷。

尽管有少量具有哲学意味的讨论,但本书还是侧重于实践。我强烈建议你在阅读样例时能亲手实践一下——没什么比代码更有说服力了。

本书未涉及的内容

本书不是语言参考手册。我们会使用一些较新的语言,例如Elixir和Clojure,但本书关注的是并发而不是编程语言,所以不会深入介绍这些语言的具体特性。希望你通过上下文可以初步了解这些语言的主要特性,如果要对其深入探究以期充分理解,就得依靠自身的努力了。阅读本书时,如果手边开着浏览器可随时查阅语言参考手册,就会事半功倍。

本书不是安装配置手册。要运行本书的配套代码,就需要安装和运行相应工具——配套代码的README文件会给出一些提示,但还是要依靠你自己。本书所有的样例都采用主流工具编写,如果遇到困难,你可以在网络上找到许多帮助资料。

本书也不是面面俱到——无法囊括所有议题的每个细节。对于某些议题,本书会一笔带过或者根本不予讨论。在某些章节中,我会特意使用一些不规范的代码,目的是便于不熟悉该语言的读者来理解代码。如果你有意深入学习本书中的某种技术,建议阅读本书所提及的权威文献。

样例代码

本书讨论的所有样例都可以从本书的网站2下载。每个样例都包括源码和构建系统。对于每一种语言,本书都选用最通用的构建系统(Java使用Maven,Clojure使用Leiningen,Elixir使用Mix,Scala使用sbt,C使用GNU Make)。

2http://pragprog.com/book/pb7con

大多数情况下,构建系统不仅会编译代码,而且会下载所需的额外依赖。sbt和Leiningen甚至会下载对应版本的Scala和Clojure的编译器,所以你只需要下载并安装构建系统即可(在网络上可以找到详尽的安装步骤)。

不过第7章中使用的C代码是个特例,需要根据你的操作系统和显卡类型安装相应的OpenCL工具包(除非你使用的是Mac,因为Xcode会搞定一切)。

给IDE用户的建议

本书使用的构建系统都在命令行下测试通过。如果你是成熟的IDE用户,一定知道如何将构建系统导入到IDE中——大多数IDE都会兼容Maven,主流IDE也都有兼容sbt和Leiningen的插件。不过我没有在IDE中测试过,所以你与我一样使用命令行也许会容易一些。

给Windows用户的建议

所有的样例均在OS X和Linux上测试通过。理论上,它们也可以在Windows上运行良好,但我并没有验证过。

第7章中使用的C代码是个特例,其使用了GNU Make和GCC。理论上是能被迁移到Visual C++中,但我没有尝试过这种可能。

在线资源

本书中的样例都可以在本书网站上找到。如果你要提交勘误或者给出建议,也可以在网站上找到勘误表格和交流论坛。

Paul Butcher

Ten Tenths Consulting

paul@tententhsconsulting.com

2014年6月于英国剑桥

目录

  • 版权声明
  • 译者序
  • 推荐序
  • 前言
  • 致谢
  • 第 1 章 概述
  • 第 2 章 线程与锁
  • 第 3 章 函数式编程
  • 第 4 章 Clojure之道——分离标识与状态
  • 第 5 章 Actor
  • 第 6 章 通信顺序进程
  • 第 7 章 数据并行
  • 第 8 章 Lambda架构
  • 第 9 章 圆满结束
  • 参考书目