大纲
- 线程 & 协程
- 同步 & 通信
- 分布式系统
协程
- 协程: 有限的并行和并发
- 执行流切换只发生在主动放弃CPU的时刻
- yield的时机是完全确定的
- 协程不能同时使用多个CPU
- python中的generator就是协程
IO耗时
- 协程: 一个人干,他人围观。
- 线程:每个线程占用可观的OS资源
Goroutine
- 多处理器并行&轻量级并发我全都要
- 实现方式:每个CPU上有一个go worker,自由调度goroutines,执行blocking API时(如sleep,read)go worker偷偷改成了non blocking的版本。
- 成功:立即继续执行
- 失败:立即yield到另一个需要CPU的goroutine
同步和通信
- claim:90%的并发问题都可以转化为生产者和消费者问题