《七周七并发模型》作者Paul Butcher:这是一个激动人心的编程时代,也是一个带有很大不确定性的时代

浏览: 167 发布日期: 2016-08-14 分类: scala

非商业转载请注明作译者、出处,并保留本文的原始链接:http://www.ituring.com.cn/Article/215241

Paul Butcher
一位资深程序员,涉猎广泛,从单片机编码到高级声明式编程无所不精,现在他开办了独立咨询公司Ten Tenths。他曾任SwiftKey的首席软件架构师,并先后担任Texperts和Smartner的CTO。

Paul Butcher的著作《七周七并发模型》延续了《七周七语言》的写作风格,通过七个精选的模型帮助读者了解并发领域的轮廓。除《七周七并发模型》外,Paul还著有在亚马逊获得全五星好评的《软件调试修炼之道》。

图灵访谈:感谢Paul再次接受图灵的访谈!您曾经讲过,在1989年开始攻读博士学位的时候,并行计算和分布式计算并不是当时的主流。为什么不选择当时的主流作为学习研究领域?

老实说,当时我的估计略有偏差。我当时认为并行计算和分布式计算不久就会成为主流。但实际上,CPU运行不断加快,人们完全没有必要为了显著提升性能,从串行编程转向并发编程。

最近,CPU的运行速度达到了瓶颈,很难再次提升。正因为如此,我当时的预测最终得以实现(离当时的预测已经有25年了)。

图灵访谈:并发和并行非常相似,两者容易相互混淆。那么两者之间的不同点有哪些?

不只是中国人,对于讲英语的人也一样,并发和并行是一种常见的易混淆概念。其实,大多数情况下,两者的区别不是特别重要,重要的是,从串行编程转向非串行编程,也就是并发和并行编程。并发和并行都属于非串行编程,它们两者面临的挑战也是一样的。

并发代码具有多个逻辑的控制线程,但这些线程可以或者不必运行在多个核上。并行代码则真正运行在多个核上。通常,并行是关乎性能的(通过使用多核,我们希望我们的代码运行得更快),而并发则是关于解决一个本身就是并发的问题域。

我之所以在《七周七并发模型》中探讨两者的区别,是因为存在一个常见的误解:并行指的是不确定性。事实却并非如此。如果我们为了运行得更快,并行处理一些数值计算,得到的结果跟串行代码的答案完全一样!

图灵访谈:距离本书的出版日期也有一年多了。是否有其他的并发模型出现?

本书出版的时候,就已经存在超过7种的并发模型了!《七周七并发模型》的最后一章也列出了其他的并发模型,如Fork/Join 和work-stealing、数据流、响应式编程、函数式响应编程、网格计算和元组空间。其中,最有趣的,我认为是函数式响应编程。

图灵访谈:书中的每一章都选用了恰当的编程语言来展示并发模型。除了编程语言这条线索,是否还有其他线索来学习并发模型?

为每一章选择不同的编程语言,是为了尽可能地降低读者对示例的理解难度。整本书也可以只选择一种语言,比如Java,但这样做的后果是,代码将变得啰嗦冗长,读者也更难理解。这一点尤其适用于函数编程那一章。尽管我们可以用Java编写函数代码,但这并不是Java的常见编写方式。这样很容易一叶障目,只见树木不见森林。

重要的是要明白,你并不需要使用本书中使用的全部语言。如果你目前是一名Java程序员,你也可以使用Akka库轻松地编写Actor代码,但你的代码肯定会比使用Elixir或者Scala 更加繁琐。因为你可以运用Elixir和Scala里面的Actor 编程模型。

图灵访谈:在选取编程语言的时候,除了考虑编程语言的并发特性,还需要关注哪些其他的特性?

还有许多特性需要考虑,大多数还特别实用,例如:

•现有的代码有哪些,可以用于之后的互操作?

•支持工具怎么样?

•该语言社区的活跃度怎么样?

•…...

不同编程语言之间的相互竞争,让语言选取变得更加复杂。而且,目前很难预测出哪种语言未来会受欢迎。

我们正处于一个非常激动人心的编程时代,但也是一个带有很大不确定性的时代。

图灵访谈:编程语言变革对程序开发者的影响有哪些?

就像我在上一个问题的回答一样,我们很难预测究竟哪种语言会变成主流语言。这对于程序开发人员来说,确实是一种