使用微信扫一扫分享到朋友圈
使用微信扫一扫进入小程序分享活动
18年的软件研发经验,软件开发的老兵,Scala集合技术手册(简/繁版)的作者,Go微服务框架 rpcx 的作者。 高性能的服务治理rpcx (Go)框架的开发者,先前在同方、Motorola、comcast从事软件开发工作,现在在微博平台研发部做基础平台的研发工作。既有跨国公司的软件开发经历,也有互联网公司的研发经验,主要专注于后台中间件产品和基础架构设计、微服务、区块链等方向。 经常在网上和个人网站(http://colobu.com)发表一些技术文章。
Go提供了我们便利的进行并发编程的工具、方法和同步原语,同时也提供给我们诸多的犯错的机会,也就是俗称的“坑”。即使是顶级Go开发的项目,比如Docker、Kubernetes、gRPC、etcd, 都是有经验丰富的Go开发专家锁开发,也踩过不少的并发的坑,而且依然源源不断的继续踩着,即便是标准库也是这样。
有时候,幸福是建立在别人的痛苦之上。分析和总结并发编程中的陷阱,避免重复踩在别人的坑中,正是本次培训课的重要内容。只有深入了解并发原语的实现,全面了解它们的特性和限制场景,注意它们的局限和容易踩的坑,才能提高我们的并发编程的能力。通过了解和学习其他人的经验和贡献的项目和库,我们可以更好的扩展我们的视野,避免重复的造轮子,或者说我们可以制作更好的轮子。
语言的内存模型定义了对变量的读写的可见性,可以清晰而准确读写事件的happen before关系。对于我们,可以很好地分析和编排goroutine的运行,避免数据的竞争和不一致的问题。
了解基本同步原语的具体实现、hack同步原语进行扩展,了解它们的使用场景和坑,已经别人是怎么踩的
了解一些扩展的同步源于,对于标准库sync包的补充
对于规模很大的项目,分布式同步原语是必不可少的,带你了解便利的分布式同步原语
atomic可以保证对数据操作的一致性,利用CAS可以设计lock-free的数据结构
channel是Go语言进行并发编程的很好的工具,带你了解它的使用姿势
了解Go语言的内存模型
Mutex的实现、扩展功能和坑。
RWMutex的实现、扩展功能和坑。
Waitgroup的实现、坑
Cond的使用和坑
Once的实现和坑,单例的Eager/Lazy实现
Pool的坑, net.Conn的池
Map的实现、应用场景
Context的一些问题
可重入锁
信号量
SingleFlight及应用
ErrGroup
自旋锁
文件锁
并发Map的多种实现
原子操作的实现
操作的数据类型
提供的函数
通用Value类型
扩展的原子操作库
锁,Mutex, RWmutex实战
栅栏
leader选举
队列
STM
其它分布式并发库
常见易犯错的channel使用场景
三大使用场景
Or-done模式的三种实现
扇入
扇出
Tee
Pipeline
流式处理
init函数
goroutine
channel
Mutex/RWMutex
Waitgroup
Once
atomic