GMP
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. 调度器的生名周期


如图所示,本来P1 P2两个 P1执行G1时候遇到阻塞 会创建M3线程 同时 P1的剩下任务迁移到M3 G1继续执行的话 就加入到其他队列中 M1睡眠、销毁
浙公网安备 33010602011771号