
2020-11-06:go中,谈一下调度器。
发布日期:2021-05-04 20:00:12
浏览次数:20
分类:精选文章
本文共 637 字,大约阅读时间需要 2 分钟。
福哥答案2020-11-06:
·MPG模型:goroutine的并发模型可以归纳为MPG模型; ·MPG概念:线程(machine,系统线程,物理线程)-内核(processor)-协程(goroutine,用户线程,逻辑线程); ·多对多调度模型:整体调度遵循多对多模型,多个协程(约百万级)同时调度在多个线程(约千级)下; ·LRQ(LocalRunningQueue):本地运行队列,一个M执行在一个P的上下文中,P中挂载着一个G队列; ·GRQ(GlobalRunningQueue):全局运行队列,G没有初始化时或者没有LRQ可供挂载时就被丢入GRQ; ·GRQ=>LRQ:MP会在LRQ执行完毕检查GRQ,并从中窃取任务挂载到当前LRQ中执行,平时也会定期检查; ·调度的目的:调度的目的是防止线程堵塞、闲置、被OS挂起(syscall); ·防止线程M堵塞:G1协程IO时脱离MP,G2从当前MP的LRQ中弹出并执行; ·防止线程M闲置:M1闲置时,会从M2的LRQ中窃取一半任务,挂载到自己的LRQ中执行; ·防止线程M被OS挂起(syscall):P带着LRQ挂到其它线程的下面执行,当syscall结束时,M会尝试将G0挂载到其它LRQ中或GRQ中;详细go调度器模型参考:
Go语言中文网:https://studygolang.com/articles/9610 简书:https://www.jianshu.com/p/f9024e250ac6发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月26日 15时37分42秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Maven手动安装dubbo到本地仓库
2019-03-04
window中使用git安装PyMySQL
2019-03-04
centos7 elasticsearch5.2.2安装kibana5.2.2
2019-03-04
centos7 elasticsearch5.2.2安装x-pack
2019-03-04
(六)多进程实现TCP服务端
2019-03-04
(Mysql 二)Linux C语言显示mysql数据库中某个表的数据
2019-03-04
JAVA单例模式
2019-03-04
AWT 窗口事件
2019-03-04
火狐浏览器无法载入配置文件
2019-03-04
LinkedList的构造函数有哪些
2019-03-04
面试题:说说HashMap的扩容过程?
2019-03-04
坚持阅读
2019-03-04
关于序列化和反序列化
2019-03-04
富文本的图片处理显示太大问题
2019-03-04
vue路由变化马上知晓
2019-03-04
jquery写法的纠正
2019-03-04
公告栏横向滚动
2019-03-04
第四课:ES6的内置对象扩展(Set 数据结构:不重复数据)(2021/4/22)
2019-03-04
一、预编译(2021/4/23)
2019-03-04
四、js的深浅拷贝(2021/4/24)
2019-03-04