欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Go高级看这一篇就够了

程序员文章站 2022-07-10 16:14:45
...

引言

走完进阶后的一个最大感受是能把调度做好很难,跟现实中高级工程师一样,站在工程的角度看待设计、处理问题和调度资源。

这里只是搬过来,详细的描述请移步到他们的公众号或者博客,谢谢。

【饶神公众号关于调度的十个系列】

铺垫

  • 三个角度区别goroutine和线程:内存消耗、创建与销毀、切换
  • M:N 模型
    Go高级看这一篇就够了
  • 什么是scheduler
    Go高级看这一篇就够了
  • 为什么需要scheduler以及它是怎么做到的
    目标:For scheduling goroutines onto kernel threads.
    核心思想是:

1.reuse threads;
2.限制同时运行(不包含阻塞)的线程数为 N,N 等于 CPU 的核心数目;
3.线程私有的 runqueues,并且可以从其他线程 stealing goroutine 来运行,线程阻塞后,可以将 runqueues 传递给其他线程。

核心内容主要包括:

1、GPM 的初始化

Go高级看这一篇就够了

2、M 是怎样一步步找工作

3、用户栈和 g0 栈的切换

Go高级看这一篇就够了

4、schedule 的调度循环是怎样运转的

Go高级看这一篇就够了

5、监控线程( sysmon)做了什么

  • 抢占处于系统调用的 P,让其他 m 接管它,以运行其他的 goroutine。

  • 将运行时间过长的 goroutine 调度出去,给其他 goroutine 运行的机会。

6、宏观状态转换

  • G:
    Go高级看这一篇就够了
  • P:
    Go高级看这一篇就够了
  • M:
    Go高级看这一篇就够了

小结

他的系列文章中看的最明白的是1和10,因为中间的编译分析大多没看懂。基本思想理解了,主要是想参看源码是怎么从代码的角度去实现这种思想的。

【欧神出版对go源码的解读】

【曹神出版从plan9对源码】

相关标签: Go