Go语言的[GPM模型]

在这里插入图片描述

在go中,线程是运行Groutine的实体,调度器的功能是把可以运行的Groutine分配到工作线程上

GPM模型

在这里插入图片描述

M与P的数量没有绝对的数量关系,当一个M阻塞时,P就会创建一个或者切换到另一个M,所以即使设置了runtime.GOMAXPROCS(1)
也可能创建多个M出来;
当M发现给自己输送G协程的那个P队列为空时会主动从其他P队列"偷",这个过程的发起端是协程调度器,

当M阻塞时,P调度器会将令阻塞的M释放绑定的P,而后把这个P交给其他M区执行;

GPM模型为了更大程度地利用M和P的性能,不会让一个P永远被一个阻塞的G1耽误之后的工作

在这里插入图片描述

Go中,一个协程最多占用cpu10ms,这样是为了防止其他协程无cpu可用

协程的调度流程

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_54061333/article/details/132794632