Concurreny in go

  • go
  • concurrency

posted on 10 Jun 2022 in series book_review

(看的英文版, 翻译不做评论)

看了一多半, 忍不住先把评论写了, 5 星推荐.

这应该是看完 gopl 之后的第二本书. 它基本上相当于 gopl 里并发相关内容的延伸, 深入和系统化. 连行文风格也有些相似. 致谢里面提到了 gopl 作者之一的 Donovan 的帮助, 或许多少有些关系.

gopl 讲并发也很精彩, 精彩在教你在非常实际的小项目中, 写出漂亮的 Go idiomatic 代码, 然后顺带 把最常见的并发模式讲了. 但这样的问题就是, 实际的模式应用中的关键点, 并没有那么凸显.

这本书在并发这块儿, 刚好能和 gopl 互补. 它专门讲 Go 并发, 专门讲模式. 业务 相关代码基本都是 “// something interesting”. 读起来可能没有 gopl 那么有意思, 但是的确能更 清晰的表现出代码到底在哪儿配合起来的, 关键点在哪儿.

它从相对从更高一层和更全面的视角审视了 Go 并发机制, 比如如何从 CSP 发展过来, 和经典的 thread fork-join 模型的对比, 并发问题在各种 context 下的行为, Go 的并发原语的优势以及如何利用这些优势 应对并发问题的. 作者是个很明显的 Go 激情传道者.

书不是很厚, 不是专门讲 Go 并发底层, 更不是专门讲并发的, 深度上会欠缺一点, 有关并发本身的主题 多是点到为止. 我觉得这并非瑕疵, 而是书本身的定位, 就只是要把 Go 并发讲明白而已. 况且并发怎么 算讲的有深度呢, 从 CPU 对并发的结构支持讲到汇编和编译指令重拍在讲到高级语言和操作系统, 还有网 络和分布式呢… 这又是书里说的 context 了…

网上和国内书籍也有很多讲 Go 并发的, 但是相对来说, 多过于罗列和碎片, 很难对 Go 并发 机制能有一套系统有机的认识, 也很难总结一套看待 Go 原语和方法和心法. 以我有限的经验来看, Go 的 并发模式来来回回的确就那么几套, 几篇博文的确也能讲个大概. 这本书总结来说, 价值在于:

  • 聚焦于模式.
  • 关注 Go 解决并发的特点, 和作为开发者应该培养的思路, 这个非常实用.
  • 更全面的理解 Go 并发.

要说缺点, 我觉得编排上可以更好一些. 有很多内容, 你会的话可以跳过, 不会的话, 读也不懂, 因为作者 总会 “talk later”. 所以, 读这本书, 前提是一定要已经把 Go 并发基础这块儿学了 (还是 gopl).

这本书在亚马逊评分也挺高, 看不懂为什么国内评分这么低.

有人说作者啰嗦, 我并不觉得. 觉得作者啰嗦的, 大概率也会觉得 K&R C 啰嗦吧? 那好吧, 没讨论的必要了.

国内很多技术书籍并不啰嗦 (除了前面一大堆人推荐, 后面又一大堆人推荐很啰嗦之外), 东拼 西凑, 恰恰是我我觉得最水的风格. rtfm 都会有些打怪升级的进度感, rtf 某些博文书让我有种: 我这么 有才, 是不是错过了一个亿的版权费的感觉.