1. GMP模型简介
- 全局队列:等待执行的
- 本地队列:等待执行的G 优先放进这里 如果满了房子全局队列 最大不超过256个
- P列表:启动时创建 最多gomaxprocs个
- M列表:内核线程数 通过setmaxthreads设置 但是M是动态的 如果M有空闲 回收 如果M阻塞 会创建
2. 设计策略
(1)复用线程
- work stealing机制:加入P1 P2两个P P1有G P2无G P2会从P1队尾拿一个执行
- hand off 机制:如图所示,本来P1 P2两个 P1执行G1时候遇到阻塞 会创建M3线程 同时 P1的剩下任务迁移到M3 G1继续执行的话 就加入到其他队列中 M1睡眠、销毁
(2) 利用并行
gopromaxprocs
(3)抢占
G到时间了10ms 其他G抢占执行
(4)全局G队列
当其他P偷取不到G 从全局队列拉取
3. 调度流程
4. 调度器的生名周期