Golang调度器GPM原理与调度分析

GPM模型包括哪些内容?

  • 全局队列:存放等待运行的G
  • P的本地队列:存放的也是等待运行的G,最多不超过不超过256个,新建G时,G优先加入到P的本地队列,如果队列满了,则会把本地队列中一半的G移动到全局队列。
  • P:处理器,在程序启动时创建,最多GOMAXPROCS个,GOMAXPROCS默认为CPU的硬件线程数目
  • M:从P的本地队列获取G,P队列为空时,M也会尝试从全局队列拿一批G放到P的本地队列,或从其他P的本地队列偷一半放到自己P的本地队列。当M阻塞了,会创建新的M

P和M的关系

M与P的数量没有绝对关系,一个M阻塞,P就会去创建或者切换另一个M

P的设计策略

1. work stealing机制

当本线程无可运行的G时,尝试从其他线程绑定的P偷取G,而不是销毁线程。

2. hand off机制

当本线程因为G进行系统调用阻塞时,线程释放绑定的P,把P转移给其他空闲的线程执行。

P的作用

把可运行的goroutine分配到工作线程上

N:1关系

N个协程绑定1个线程,优点就是协程在用户态线程即完成切换,效率高,但一旦某协程阻塞,造成线程阻塞,所有协程无法执行

1:1 关系

1个协程绑定1个线程,cpu消耗高

M:N关系

m个协程通过处理器绑定n个线程,解决以上两种问题,实现较复杂

详细
https://www.jianshu.com/p/fa696563c38a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值