参考:https://tonybai.com/2017/06/23/an-intro-about-goroutine-scheduler/,本文说明了GPM的发展,以及调度的过程,下面记录我自己的所思和疑虑
一,GPM各个的意思和作用
二、GPM之间的配合作用
1)G的出现
新创建一个goroutine(G)时会,检查是否有闲置的p(p的数量是根据cpu中的线程决定的,比如双核四线程,就可以认为是p最大数量可以为4),若有,则将G添加到已经绑定好的P和M中的P的G队列中,等待被调度。
2)G的调度其实是一种抢占式的调度。(饥饿游戏-抢)
当程序启动后,会存在一个sysmon线程(监控线程),属于制定规矩的超级管理者,它会一直存在而且不会受控于GPM规则。当它检查所有的G时,发现某个G运行时间已经很长了(time=10ms),那么sysmon就对该G进行留校察看处分将其标志位置为true,表示该G在下次调用函数时就会被其他的G(已经在队列中等了很久了)抢占,让出对应的M供新的G进行调用
3)GPM之间的关系图
原文:https://www.cnblogs.com/carySir/p/12530133.html