1.基础模型
1.1.单进程时代的两个问题
- 当一执行流程、计算机智能一个任务一个任务处理
- 进程堵塞所带来的CPU浪费时间
1.2.能不能宏观的执行多个任务呢?
1.3.多线程/多进程解决了阻塞问题
新的问题
说明
面临的问题
- 多线程 随着 同步竞争(如 锁、竞争资源冲突等)
- 开发设计 变的越来越复杂
1.4.思考
1.4.1.空间切分
延伸
继续演化
1.4.2.Golang对协程的处理
早期调度器的处理
早期调度器缺点
- 创建、销毁、调度G都需要每个M获取锁,这就形成了激烈的所竞争。
- M转移G会造成
延迟和额外的系统负载
- 系统调用(cpu在M之间的切换)导致频繁的线程堵塞和取消操作
增加了系统开销
GMP
详细说明
2.调度器设计策略
- 复用线程
- work stealing机制
- hand off 机制
- 利用并行
- GOMAXPROCS限定P的个数
- = CPU核数/2
- 抢占
- 全局G队列
2.1.work stealing机制
2.2.hand off 机制
2.3.抢占
早期的方式i
goroutine方式