- Scala并发编程(第2版)
- (瑞士)亚历山大·普罗科佩茨
- 940字
- 2021-08-17 17:17:55
序言
并发计算和并行计算发展迅猛,或许它们曾经是纯粹的理论知识,或者局限于内核计算和高性能计算等少数几个领域,但如今,它们已经走向千家万户,成为每名优秀程序员必备的技能之一。因为并行和分布式计算系统已经是行业标配,大部分应用需要用并发计算来提高性能以及处理异步事件。
这是一场“革命”,然而,目前大部分开发者还没有准备好。也许有些人在学校学过传统的并发计算模型,采用的是线程和锁机制,但这种模型已经不足以高效、可靠地实现大规模并发计算。实际上,线程和锁机制较难用,更容易出错。因此,人们迫切需要对并发计算进行进一步抽象,构造出更高层次的组件。
15年前,我用过一门实验性语言 Funnel,它是 Scala 的先驱,在内核采用了并发语义。在这门语言中,所有编程概念都是基于函数式网络(functional net)的“语法糖”,这是一种面向对象版本的连接演算(join calculus)。虽然连接演算理论优美,但人们在试验后发现,并发计算其实涉及多方面的问题,难以在单一的形式化体系中很好地表达出来。也许并不存在解决所有并发问题的高招,对不同的需求需要采用不同的方案。比如,利用异步计算来响应事件和数据流,在消息通信时使用自发而独立的实体,为状态可变的数据中心定义事务,或者用并发计算提高性能。每一个任务都有着相应的更为合适的抽象方式:Future、响应式流(reactive stream)、角色、事务性内存或并行容器。
于是有了 Scala 和本书。并发计算中有用的抽象模型如此之多,将它们拼凑到一门语言中似乎并不明智。不过,Scala的目标就是让用户能在编码时更方便地定义各种高层抽象,并以此来构建代码库。于是,Scala程序员可以定义出能够处理不同并发编程问题的模块,而这样的模块都基于宿主系统提供的底层内核。回顾过去,这种编程方式已然成功。现如今,Scala已经拥有一些强大而优雅的并发编程库。本书将为读者呈现其中非常重要的几种,并介绍每一种的使用案例和应用模式。
本书的作者亚历山大·普罗科佩茨是Scala语言方面的专家。他编写了多个流行的Scala并发和并行库。他还发明了一些精巧的数据结构和算法。本书既是阅读性强的教程,也是本书作者所在的并发计算领域的重要参考资料。我相信本书会成为 Scala 并发和并行编程相关人员的必备读物。同时,如果读者只是希望了解一下这个快速发展、令人着迷的计算领域,本书也值得一读。
马丁·奥德斯基 EPFL的教授,Scala的创造者