第1章 Go并发编程和调度器
1.1 Go特别适合并发编程
1.2 并发 vs 并行
1.3 阿姆达尔定律:并发编程优化是有上限的
1.4 Go并发并不一定最快
1.5 Go运行时调度器
第2章 互斥锁Mutex
2.1 竞争条件与数据竞争
2.2 Mutex的用法
2.2.1 一个并发问题
2.2.2 Mutex的使用
2.2.3 地道的用法
2.3 检查程序中的数据竞争
2.4 Mutex的历史实现
2.4.1 初始版本
2.4.2 多给新的 goroutine 一些机会
2.4.3 多给竞争者一些机会
2.4.4 解决饥饿问题
2.4.5 TryLock
2.5 Mutex的使用陷阱
2.5.1 误写
2.5.2 死锁
2.5.3 锁重入
2.5.4 复制锁
2.6 Mutex的扩展
2.6.1 可重入锁
2.6.2 支持并发 map
2.6.3 封装值
第3章 读写锁 RWMutex
3.1 读写锁的使用场景
3.2 读写锁的使用方法
3.3 读写锁的实现
3.3.1 RLock的实现
3.3.2 RUnlock的实现
3.3.3 Lock的实现
3.3.4 Unlock的实现
3.3.5 TryLock的实现
3.3.6 TryRLock的实现
3.4 读写锁的使用陷阱
3.4.1 锁重入
3.4.2 死锁
3.4.3 发现死锁
3.5 读写锁的扩展
第4章 任务编排好帮手 WaitGroup
4.1 WaitGroup的使用方法
4.2 WaitGroup的实现
4.3 WaitGroup的使用陷阱
4.3.1 Add 方法调用的时机不对
4.3.2 计数器的值为负数
4.3.3 错误的调用 Add的时机
4.3.4 知名项目中关于 WaitGroup 使用的 bug
4.4 WaitGroup的扩展
4.5 noCopy:辅助 vet 检查
第5章 条件变量 Cond
5.1 Cond的使用方法
5.2 Cond的实现
5.3 Cond的使用陷阱
5.3.1 调用 Wait 时没有加锁
5.3.2 唤醒之后不检查判断条件
5.4 在实际项目中使用 Cond的例子
第6章 单例化利器 Once
6.1 Once的使用方法
6.2 Once的实现
6.3 Once的使用陷阱
6.3.1 死锁
6.3.2 未初始化
第7章 并发 map
7.1 线程安全的 map
7.1.1 使用 map的两种常见错误
7.1.2 加读写锁:扩展 map,支持并发读/写
7.2 sync.Map的使用方法
7.3 sync.Map的实现
7.3.1 Swap 方法
7.3.2 Load 方法
7.3.3 Delete 方法
7.4 分片加锁:更高效的并发map
7.5 lock-free map
第8章 池 Pool
8.1 sync.Pool的使用方法
8.2 sync.Pool的实现
8.2.1 Get 方法的实现
8.2.2 Put 方法的实现
8.3 sync.Pool的使用陷阱
8.4 连接池
8.4.1 标准库中的 HTTP Client 池
8.4.2 数据库连接池
8.4.3 TCP 连 接池
8.4.4 Memcached Client 连接池
8.4.5 net/rpc 中的 Request/Response 对象池
8.5 goroutine/worker 池
第9章 不止是上下文:Context
9.1 Context的发展历史
9.2 Context的使用方法
9.2.1 基本用法
9.2.2 传递上下文
9.2.3 可撤销的上下文
9.2.4 带超时功能的上下文
9.3 Context 实战
9.4 Context的使用陷阱
9.5 Context的实现
9.5.1 WithValue的实现
9.5.2 WithCancel的实现
9.5.3 WithDeadline的实现
第10章 原子操作
10.1 原子操作的基础知识
10.2 原子操作的使用场景
10.3 atomic 提供的函数和类型
10.3.1 AddXXX函数
10.3.2 CompareAndSwapXXX函数
10.3.3 SwapXXX函数
10.3.4 LoadXXX函数
10.3.5 StoreXXX函数
10.3.6 Value 类型
10.3.7 Bool、Int32、Int64、Pointer、Uint32、Uint64、Uintptr
10.4 uber-go/atomic 库
10.5 lock-free 队列的实现
10.6 原子性和可见性
第11章 channel 基础:另辟蹊径解决并发问题
11.1 channel的历史
11.2 channel的应用场景
11.3 channel的基本用法
11.4 channel的实现
11.4.1 channel的数据结构
11.4.2 初始化
11.4.3 发送数据
11.4.4 接收数据
11.4.5 关闭 channel
11.5 channel的使用陷阱 / 224
11.5.1 panic 和 goroutine 泄漏
11.5.2 知名项目踩过的坑
第12章 channel的内部实现和陷阱
12.1 使用反射操作 select 和 channel
12.2 channel的应用场景
第13章 Go内存模型
13.1 指令重排和可见性的问题
13.2 sequenced before、synchronized before 和 happens before
13.3 各种同步原语的同步保证
13.3.1 初始化
13.3.2 goroutine的运行
13.3.3 channel
13.3.4 锁(Mutex 和 RWMutex)
13.3.5 Once
13.3.6 WaitGroup
13.3.7 atomic操作
13.3.8 Finalizer、sync.Cond、sync.Map 和 sync.Pool
13.4 不正确的同步
第14章 信号量 Semaphore
14.1 什么是信号量
14.1.1 P/V 操作
14.1.2 信号量和互斥锁的区别与联系
14.2 信号量的 channel 实现
14.3 Go官方的信号量实现
14.4 使用信号量的常见错误
第15章 缓解压力利器 SingleFlight
15.1 SingleFlight的实现
15.2 SingleFlight的使用场景
第16章 循环屏障 CyclicBarrier
16.1 CyclicBarrier的使用场景
16.2 CyclicBarrier的实现
16.3 使用 CyclicBarrier的例子
第17章 分组操作
17.1 ErrGroup
17.1.1 ErrGroup的基本用法
17.1.2 ErrGroup 使用示例
17.2 其他实用的 Group 同步原语
17.2.1 SizedGroup/ErrSizedGroup
17.2.2 gollback
17.2.3 Hunch
17.2.4 schedgroup
第18章 限流
18.1 基于令牌桶实现的限流库
18.1.1 x/time/rate
18.1.2 juju/ratelimit
18.2 基于漏桶实现的限流库
18.3 分布式限流
第19章 Go并发编程和调度器
19.1 Leader 选举
19.1.1 选举
19.1.2 查询
19.1.3 监控
19.2 锁 Locker
19.3 互斥锁 Mutex
19.4 读写锁 RWMutex
19.5 分布式队列和优先级队列
19.6 分布式屏障 / 340
19.7 计数型屏障 / 342
19.8 软件事务内存
第20章 并发模式
20.1 并发模式概述
20.2 半异步 / 半同步模式
20.3 活动对象模式
20.4 断路器模式
20.5 截止时间和超时模式
20.6 回避模式
20.7 双重检查模式
20.8 保护式挂起模式
20.9 核反应模式
20.10 调度器模式
20.11 反应器模式
20.12 Proactor模式
20.13 percpu模式
20.14 多进程模式
第21章 经典并发问题解析
21.1 哲学家就餐问题
21.1.1 模拟哲学家就餐问题
21.1.2 解法一:限制就餐人数
21.1.3 解法二:奇偶处理方法
21.1.4 解法三:资源分级
21.1.5 解法四:引入服务生
21.2 理发师问题
21.2.1 使用 sync.Cond 解决理发师问题
21.2.2 使用 channel 实现信号量
21.2.3 有多个理发师的情况
21.3 水工厂问题
21.4 fizz buzz 问题
21.4.1 将并发转为串行
21.4.2 使用同一个channel
21.4.3 使用CyclicBarrier
· · · · · · (
收起)
0 有用 d0ngd0ng 2023-12-25 23:25:42 北京
读完后有些收获,最大收获竟然是最后的多进程模式
0 有用 沉寂之舟 2024-06-11 14:44:35 俄罗斯
虽然像是blog文章整理,每个章节关联度较低,少了点递进的学习感觉,但是总体还是如书名,把Go并发编程的要点囊括了,既讲了基本用法,源码的实现,甚至还把一些容易犯错的坑点也总结了,很有收获,推荐...
1 有用 LinkinStar 2024-02-04 23:39:56 浙江
从Go的GPM模型到内存模型,从Go自带的锁、channel到第三方实现的CyclicBarrier等等,最后再总结的实际的场景以及解决方案。读完之后,我总结的是:需要学会使用工具并合理利用工具来解决并发问题。PS:这本书的插图画的真的很有意思。
0 有用 安然入睡 2024-04-30 06:47:06 上海
扒拉了一些官方的库里的代码,不仔细阅读那些代码,感觉更没读过一样
2 有用 我是火车王 2023-12-28 22:49:34 辽宁
那么回事吧,文不达意,排版松散,内容有低级错误,校验马虎,很难想象是历时五年完成的东西。400页160元,太贵了,就为了挣钱呗
0 有用 沉寂之舟 2024-06-11 14:44:35 俄罗斯
虽然像是blog文章整理,每个章节关联度较低,少了点递进的学习感觉,但是总体还是如书名,把Go并发编程的要点囊括了,既讲了基本用法,源码的实现,甚至还把一些容易犯错的坑点也总结了,很有收获,推荐...
0 有用 安然入睡 2024-04-30 06:47:06 上海
扒拉了一些官方的库里的代码,不仔细阅读那些代码,感觉更没读过一样
1 有用 LinkinStar 2024-02-04 23:39:56 浙江
从Go的GPM模型到内存模型,从Go自带的锁、channel到第三方实现的CyclicBarrier等等,最后再总结的实际的场景以及解决方案。读完之后,我总结的是:需要学会使用工具并合理利用工具来解决并发问题。PS:这本书的插图画的真的很有意思。
1 有用 古彭 2023-12-29 08:24:14 北京
半价预订的,印刷精美,插图风趣。好多Go并发知识第一次接触到。看鸟窝老师的博客长大的,希望学的到知识应用能应用到工作中,许愿2024加薪升职
2 有用 我是火车王 2023-12-28 22:49:34 辽宁
那么回事吧,文不达意,排版松散,内容有低级错误,校验马虎,很难想象是历时五年完成的东西。400页160元,太贵了,就为了挣钱呗