一些 Java 并发和分布式方面的书。

并发相关书籍

并发编程经典 Java Concurrency In Practice 就不说了,只说国内一些比较新的书。

《Java 并发编程的艺术》- 方腾飞、魏鹏、程晓明

比较有价值的是第 2 章、第 3 章。

第 2 章首先初步讲了一些 volatile 的实现、CPU false-sharing 问题、synchronized 的实现原理,但真正深入讲解 volatile 其实是在第 3 章。第 2 章的主要价值在于 Java 对象头的讲解、Java 1.6 对锁的优化和 CAS 操作。这一章感觉在很多问题上没有讲述完整,比如 cpu false-sharing 问题追加字节的解决办法,没有说明对象头是如何加载到 CPU Cache Line 中的,也没有提到 jdk 1.8 的 Contended 解决方法。

第 3 章是全书最有深度的一章,其篇幅占比之高使得此书有虎头蛇尾之嫌,往后的章节较为敷衍。这一章全面深入到 Java 内存模型中,极其细致地讲述了 JMM、指令重排、volatile 的内存语义、JSR 133 对 volatile 的增强、final 的内存语义、happens-before 原则等,先前我只是大致了解 volatile 可以屏蔽 CPU 指令重排优化,不曾了解 volatile 的防止指令重排实际是与内存屏障有关。

其他章节没什么特别出彩的地方。与其他书籍相比没什么独特价值。

《Java 高并发程序设计》 - 葛一鸣、郭超

这本书与上面一本相比,不是特别深入,主要价值在于内容比较全面、扎实。甚至对 NIO/AIO,Disruptor、Java 8 CompletionStage 和 Akka 都做了讲解。

先前在工作中浅显地用过 Akka Actor,这本书讲得稍微深入一些,提到如何用 Akka 实现并发粒子群。

对 Java 平台的 Actor 有着鲜明态度的要数 leader-us 的 《架构解密》。Actor 模型归根结底要跑在线程上,注定绕不过这个冯诺依曼机器的时代。首先,Actor 完全避免了共享,仅仅通过消息传递来交流,程序员无法精细化控制;其次,Actor 模型避免不了死锁问题,并且还有独特的一些问题,如信箱溢出;最后,如果某个 Actor 因为某个错误陷入死循环,疯狂消耗 CPU, 那么整个系统就瘫痪了,其他 Actor 很难有机会正常工作,此时 Java 上的 Akka 平台无能为力,什么也调度不了,只能等待操作系统来切换线程。Erlang 由于尽力实现了可抢占的公平,从而较好的解决了这个问题。(BTW,Erlang 的成熟的模块化也远远领先于其他语言。Erlang 的运行时中内嵌了模块的概念,可以对 Erlang 的模块画进行停止、重启或者升级等操作,Erlang 甚至支持同时运行同一个模块的多个版本。参考 Sam Newman 的《微服务设计》)

《Java 程序性能优化》 - 葛一鸣等

这本书很多代码、知识点跟上面一本有很多重复的地方,也无可厚非。很多技术圈里人喜欢在不同场合翻来覆去输出同一套东西。

这本书比较有价值的是最后两章,JVM 调优和 Java 性能工具。其他章节也延续了葛一鸣一贯的扎实风格,对设计模式也做了一些讲解。

《七周七并发》

这本书没有全部读完,只读了前面几章。非常简要,但很精炼,值得细读。

《Scala 并发编程》

千万不要读中文版,中文版翻译得跟狗屎一样。

即使不考虑中文版,这本书的价值也一般。

分布式相关书籍

《大型网站技术架构:核心原理与案例分析》- 李智慧

这本书算是比较有干货的。虽然里面有些地方绕来绕去、有些罗嗦,但瑕不掩瑜。可以当作一本很好分布式架构入门书籍。

《大型分布式网站架构设计与实践》- 陈康贤

整本书通读一遍,感觉技术相对比较陈旧。

《架构解密-从分布式到微服务》- leader-us

leader-us 真名叫吴治辉。文风很幽默。

这本书纵横捭阖、气象宏大,个别细节可能不太严谨,但总的来讲是一本增长知识、拓展视野的好书。

这本书比较新,最后一章还讲到了 Kubernetes.

《大规模分布式系统架构与设计实战》 - 鹏渊

这本书还没读。不打分。

《分布式服务框架原理与实践》 - 李林峰

这本书个人感觉一般。李林峰在 RPC、Netty 方面的水平无可争议,但这本书很笨重很空洞。篇幅很长,洋洋洒洒 21 章。

《分布式服务架构:原理、设计与实战》- 李艳鹏

一般。