文章预览
前言 关于GMP模型网上已经有很多文章,讲的内容大多都是如下图的逻辑,本系列不再赘述。本系列换个视角,核心搞清楚两个问题: GMP到底是什么? goroutine如何恢复和保存上下文的? 正文开始。 GMP 只是结构体 GMP 并不是你想象的那么神奇的存在,其实就是普通的结构体,如同你写业务代码定义的结构体一样,如下: // Goroutine // 代码位置:go1.19/src/runtime/proc.go type g struct { stack stack //...略... gopc uintptr startpc uintptr sched struct { sp uintptr pc uintptr //...略... bp uintptr } //...略... } // Machine // 代码位置:go1.19/src/runtime/proc.go type m struct { g0 *g //...略... curg *
………………………………