GO GMP协程调度原理,5万字长文揭秘史上最全面解析?

2026-05-05 17:241阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计14185个文字,预计阅读时间需要57分钟。

GO GMP协程调度原理,5万字长文揭秘史上最全面解析?

Go语言简介:Go语言是互联网时代的C语言,因其语法简洁易学,对高并发有语言级支持,且不同于虚拟机的方案。Go通过在编译时嵌入平台相关的系统指令,可直接编译为对应平台的可执行文件。

1 Runtime简介 Go语言是互联网时代的C,因为其语法简洁易学,对高并发拥有语言级别的亲和性。而且不同于虚拟机的方案。Go通过在编译时嵌入平台相关的系统指令可直接编译为对应平台的机器码,同时嵌入Go Runtime,在运行时实现自身的调度算法和各种并发控制方案,避免进入操作系统级别的进程/线程上下文切换,以及通过原子操作、自旋、信号量、全局哈希表、等待队列多种技术避免进入操作系统级别锁,以此来提升整体性能。 Go的runtime是与用户代码一起打包在一个可执行文件中,是程序的一部分,而不是向Java需要单独安装,与程序独立。所以用户代码与runtime代码在执行时没有界限都是函数调用。在Go语言中的关键字编译时会变成runtime中的函数调用。 Go Runtime核心主要涉及三大部分:内存分配、调度算法、垃圾回收;本篇文章我们主要介绍GMP调度原理。关于具体应该叫GPM还是GMP,我更倾向于成为GMP,因为在runtime代码中经常看到如下调用:

1 buf := &getg().m.p.ptr().wbBuf 其中getg代表获取当前正在运行的g即goroutine,m代表对应的逻辑处理器,p是逻辑调度器;所以我们还是称为GMP。 (以上部分图文来自:zhuanlan.zhihu.com/p/95056679) 2 GMP概览 下面这个图虽然有些抽象(不如花花绿绿的图片),确是目前我看到对整个调度算法设计的重要概念覆盖最全的。

阅读全文

本文共计14185个文字,预计阅读时间需要57分钟。

GO GMP协程调度原理,5万字长文揭秘史上最全面解析?

Go语言简介:Go语言是互联网时代的C语言,因其语法简洁易学,对高并发有语言级支持,且不同于虚拟机的方案。Go通过在编译时嵌入平台相关的系统指令,可直接编译为对应平台的可执行文件。

1 Runtime简介 Go语言是互联网时代的C,因为其语法简洁易学,对高并发拥有语言级别的亲和性。而且不同于虚拟机的方案。Go通过在编译时嵌入平台相关的系统指令可直接编译为对应平台的机器码,同时嵌入Go Runtime,在运行时实现自身的调度算法和各种并发控制方案,避免进入操作系统级别的进程/线程上下文切换,以及通过原子操作、自旋、信号量、全局哈希表、等待队列多种技术避免进入操作系统级别锁,以此来提升整体性能。 Go的runtime是与用户代码一起打包在一个可执行文件中,是程序的一部分,而不是向Java需要单独安装,与程序独立。所以用户代码与runtime代码在执行时没有界限都是函数调用。在Go语言中的关键字编译时会变成runtime中的函数调用。 Go Runtime核心主要涉及三大部分:内存分配、调度算法、垃圾回收;本篇文章我们主要介绍GMP调度原理。关于具体应该叫GPM还是GMP,我更倾向于成为GMP,因为在runtime代码中经常看到如下调用:

1 buf := &getg().m.p.ptr().wbBuf 其中getg代表获取当前正在运行的g即goroutine,m代表对应的逻辑处理器,p是逻辑调度器;所以我们还是称为GMP。 (以上部分图文来自:zhuanlan.zhihu.com/p/95056679) 2 GMP概览 下面这个图虽然有些抽象(不如花花绿绿的图片),确是目前我看到对整个调度算法设计的重要概念覆盖最全的。

阅读全文