《深入理解Go并发编程:从原理到实践,看这本就够了》分为四大部分。第1部分包括第1~13章,主要介绍Go标准库的同步原语,包括互斥锁Mutex、读写锁RWMutex、WaitGroup、条件变量Cond、Once、Map、Pool、Context、channel等,以及最新的原子操作知识,其中重点介绍了channel,最后还介绍了Go的内存模 型。第2部分包括第14~18章,主要介绍Go官方的扩展库和第三方的同步原语,包括信号量、SingleFlight、CyclicBarrier、分组操作库、限流库等。第3部分包括第19章,主要介绍基于etcd的分布式同步(并发)原语。第4部分包括第20章和第21章,主要归纳总结Go的并发模式,并尝试使用本书介绍的同步原语解决经典的并发问题。
《深入理解Go并发编程:从原理到实践,看这本就够了》主要面向的是已经具有Go软件编程开发经验的工程师、基础架构软件开发工程师和架构师,需要初步和深入了解Go并发编程的相关知识,设计和实现高并发的基础软件与分布式系统的专业人员,以及对Go并发感兴趣的读者。
以漫画与通俗易懂的语言阐释复杂的并发概念,让读者在轻松愉悦中掌握Go语言强大的并发能力。一线互联网大厂名家之作。
晁岳攀(@鸟窝),rpcx微服务框架作者,Go语言布道师,技术专栏作家。
历时五年,本书终于和读者见面了。
五年,不长也不短。五年,可以让我有充足的时间来沉淀、挖掘和整理Go并发相关知识,为读者呈现一本全面且深入的Go并发知识的书。五年来,相关的Go并发知识也在不断地更新,比如Go内存模型的重新定义、atomic包更新,以及互斥锁和读写锁终于加上了TryLock 方法等,对这些同步原语内部的实现也有优化,相关的最新变动也都体现在本书中。
从 2018年开始,我就有意地梳理Go并发编程的知识。2019年,在GopherChina大会上做了第一次分享,后来又在滴滴出行做过专门的研讨课,再后来,我在“极客时间”上做了一个《Go并发编程实战课》专栏,大家反映也比较好。
其实,我很早就想把“极客时间”上的专栏内容整理出来,再加上这几年我对Go并发编程的新的理解和总结,把它打造成一本全面且深入的Go并发编程的书。Go非常适合并发编程,学习Go语言的人感受最深,但是熟练掌握并发编程并不是一件简单的事情,比如知名的Go生态圈的项目,包括Go语言本身,也都出现过很多并发编程的错误。有些书也介绍了Go标准库的几个同步原语,并简单介绍了其使用方法,但是读者觉得不过瘾。所以,我很想尽快将这些内容整理成书,但是一拖就是三四年,“忙”是我用来解释这本书现在才出版的一个借口,“迟疑”才是我一拖再拖的原因。
我有两个迟疑的点:一是我一直在思考,当前我整理出来的Go并发知识是否已经足够全面?我不想出一本关于Go并发编程的书,只是介绍Go并发编程的部分知识,我想系统地覆盖Go并发编程的各个方面,让想学习Go并发编程的读者看这一本书就足够了。所以,这几年我也一直在整理、分析和补充Go并发编程的资料,现在终于到了它“出山”的时候。
二是我有点儿个人化。我期望这本书读者阅读起来非常舒服、有条理。多年前我也出过书,这么多年我也阅读过很多计算机方面的书。我个人觉得书籍的排版、样式、插图、颜色非常影响读者的读书兴趣,我期望这本书能够有良好的排版、舒服的字体和间距、漂亮的插图,并且彩色印刷。我夫人经常嘲笑我这是买椟还珠,但是我还是期待能够遇到与我的这种执念一致的“有缘人”,直到看到《深入理解Linux网络》这本书,通过作者彦飞认识了知名的出版策划人姚新军老师,一拍即合,本书才得以出版。我个人虽然没有美术细胞,但是我从读者的角度希望本书能够以Gopher卡通的形象,最好以中国传统古典风格设计插图。我看了相关的插图和排版,我个人非常喜欢,相信读者阅读起来也会觉得妙趣横生。
当然,为避免“金玉其外,败絮其中”的结局,本书还是致力于干货的介绍,也不枉读者送我“鸟窝出品,必是干货”的称号。本书内容经过仔细的设计,有清晰的脉络可以遵循,内容由浅入深,适合各层次的Go语言爱好者学习,甚至买回来当一本工具书备查也是不错的。
本书特色
● 全面。本书详细介绍了Go标准库中的每一个同步原语,并且补充介绍了Go官方扩展库的同步原语,以及很多第三方的并发库。本书还全面介绍了基于etcd的分布式同步原语,读者在开发分布式程序的时候它很有参考价值。本书还梳理了Go并发模式,读者可以系统性地了解采用并发模式要解决的问题。
● 由浅入深。每个同步原语一开始都会介绍其使用场景和基本的使用方法,很多同步原语都会介绍其实现,读者可以深入了解同步原语背后的原理。书中有作者多年开发经验的总结和梳理,让读者少走弯路。
● 实战。书中包含大量的示例,独创性地梳理了同步原语使用陷阱,还专门列出了知名项目如Kubernetes、Docker、gRPC等项目中出现的并发错误,让读者切身感受到知名项目的有经验的Go程序员也会犯的错。
● 独立。各章之间没有依赖性,每一章都是独立的,读者可以从任意一章开始进行学习。正如“极客时间”的一位读者所说,课程需要反复学几遍才能理解透,所以希望读者也能勤翻一翻本书,多学习几遍,把相关知识掌握透彻。
读者对象
这是一本专门讲解Go并发编程的书。虽然本书面对的是Go初级、中级、高级的程序员,但还是希望读者有基本的Go语言知识,至少要花半天时间先学习一下Go语言的基本编程知识,因为我在一些场合听到其他语言的程序员说半天就可以掌握Go语言了(当然也可以看看其他编程语言的程序,和其他语言的并发编程做一个对比,很多知识都是相通的,可以借鉴)。
任何想使用Go语言进行编程的朋友,无论是在校的学生,还是企业中有志于使用
Go语言编程的程序员,建议都看一看本书。