前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Go] golang的MPG调度模型

[Go] golang的MPG调度模型

作者头像
唯一Chat
发布2019-09-10 10:33:35
1.8K0
发布2019-09-10 10:33:35
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地

MPG模式运行状态1 1)当前程序有三个M,如果三个M都在一个cpu运行,就是并发,如果在不同的cpu运行就是并行 2)M1,M2,M3正在执行一个G,M1的协程队列有三个,M2的协程队列有三个,M3的协程队列有两个 3)从上图可以看到:Go的协程是轻量级的线程,是逻辑态的,Go可以容易的起上万个协程 4)其他程序c/java的多线程,往往是内核态的,比较重量级,几千个线程就有可能耗光cpu资源

MPG模式运行状态2 1)分成两个部分来看 2)原来的情况是M1主线程正在执行G1协程,另外有三个协程在等待 3)如果G1协程阻塞,比如读取文件或者数据库 4)这时就会创建M2主线程(也可能是从已有的线程池中取出M2)并且将等待的三个协程挂到M2下执行,M1主线程下的G1仍然执行文件的读写 5)这样的MPG调度模式,既可以让G1执行,也不会让队列的其他协程一直阻塞

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档