并发编程是软件开发中最具挑战性的课题之一。编写正确的程序已属不易,编写正确的并发程序更是难上加难——数据竞争、死锁、内存可见性……这些问题隐蔽、随机,极难复现。
Go 语言自诞生之日起就将并发视为一等公民。它没有沿袭 Java、C++ 以共享内存为核心的并发模型,而是借鉴 CSP 理论,以 goroutine 与 channel 作为基础抽象,提出了那句影响深远的哲学:
不要通过共享内存来通信,而要通过通信来共享内存。
本小册从这一哲学出发,系统梳理 Go 并发编程的完整知识体系。全书分为五个部分,共 14 章 + 3 个工程实战案例:
- 并发基础:从哲学背景到数据竞争、原子性、内存同步三大核心难题;
- Go 运行时基础:深入 GMP 线程模型与 Go 内存模型 Happens-Before 原则;
- 同步原语:goroutine 生命周期、互斥锁/读写锁/条件变量、atomic 无锁编程、WaitGroup/Once、Channel;
- 高级并发模式:Context 超时控制、Pipeline/Fan-out/Fan-in/Worker Pool 经典模式、并发陷阱与最佳实践;
- 工程实战:解析 net/http 优雅关闭、beego 并发启动、sync.Pool 等真实开源框架的并发设计。
每个知识点都从原理出发,辅以可运行的代码示例,最终落脚到工程实践,帮助你真正写出正确、高效的并发代码。
你会学到什么?
- 理解 Go 并发哲学:搞清楚 CSP 模型与共享内存模型的本质区别,建立 Go 并发编程的正确思维框架;
- 掌握 GMP 调度机制:深入理解 Goroutine、Machine、Processor 三者协作关系,理解 goroutine 调度的底层逻辑;
- 吃透 Go 内存模型:理解 Happens-Before 原则,彻底搞清楚什么情况下会出现内存可见性问题;
- 熟练使用同步原语:sync.Mutex、sync.RWMutex、sync.Cond、sync.WaitGroup、sync.Once、sync/atomic,知道每种工具的适用场景与底层实现;
- 深度掌握 Channel:理解 channel 的内部结构、发送/接收的阻塞机制、select 多路复用,以及 channel 与 timer 的配合使用;
- 运用经典并发模式:能够在工程中落地 Pipeline、Fan-out/Fan-in、Worker Pool 等模式,用 Context 优雅控制并发任务的生命周期;
- 识别并规避并发陷阱:掌握常见并发 Bug 的成因与排查手段,建立并发编程的工程直觉;
- 读懂框架级并发设计:通过分析 net/http、beego、sync.Pool 等真实源码,将所学知识融会贯通,具备架构级的并发设计能力。
适宜人群
- 有 Go 语言基础(了解函数、结构体、接口),希望系统学习 Go 并发编程的开发者;
- 有 Java、Python 等其他语言并发经验,希望理解 Go 并发模型差异的工程师;
- 渴望深入理解 GMP 调度模型、Go 内存模型等底层机制的中高级 Go 开发者;
- 在生产环境中踩过并发 Bug,希望建立系统性认知的后端技术人员;
- 备战大厂面试,需要攻克 Go 并发专题的求职者。
阅读本小册不需要操作系统或编译原理专业背景,但建议具备 Go 基本语法基础。