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可用

协程的调度流程

在这里插入图片描述文章来源地址https://uudwc.com/A/8dRJB

原文地址:https://blog.csdn.net/weixin_54061333/article/details/132794632

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年09月15日 01:59
redis 配置与优化
下一篇 2023年09月15日 02:00