Go runtime 调度器精讲(十一):总览全局
原创文章,欢迎转载,转载请注明出处,谢谢。
【目录】
- Go runtime 调度器精讲(一):Go 程序初始化
- Go runtime 调度器精讲(二):调度器初始化
- Go runtime 调度器精讲(三):main goroutine 创建
- Go runtime 调度器精讲(四):运行 main goroutine
- Go runtime 调度器精讲(五):调度策略
- Go runtime 调度器精讲(六):非 main goroutine 运行
- Go runtime 调度器精讲(七):案例分析
- Go runtime 调度器精讲(八):运行时间过长的抢占
- Go runtime 调度器精讲(九):系统调用引起的抢占
- Go runtime 调度器精讲(十):异步抢占
0. 前言
前面用了十讲介绍了 Go runtime 调度器,这一讲结合一些图在总览下 Go runtime 调度器。
1. 状态转换图
首先是 Goroutine 的状态转换图:
大部分转移路径前面几讲也介绍过,这里就不继续介绍了(下同)。
接着是 P 的状态转移图:
最后是线程 M 的状态转移图:
(注:上述图片均来自于公众号 [码农桃花源],饶大画的太好了,直接让人不想画了。很好的公众号,干货满满,逻辑严密,清晰,偶尔还诙谐幽默,推荐哦。)
2. GPM
2.1 GPM 工作流程
直接上图:
(这个图来自资深 Gopher 曹大,他的网站在 这里,推荐哦)
2.2 调度流程
点这里看 -> 动态演示图
(这个图和动画也来自曹大哈哈)
3. 小结
基本到这里 Go runtime 调度器精讲就介绍差不多了,希望这几讲能让大家有所收获,感谢陪伴,再见。
4. 参考资料
- go语言调度器源代码情景分析
- The Go scheduler
- Go Wiki: Debugging performance issues in Go programs
- goroutine 调度器
- Go 语言高级编程
芝兰生于空谷,不以无人而不芳。