17.Goroutine的基本模型和调度设计策略
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方式


2.4.全局G队列





浙公网安备 33010602011771号