go深入解析goroutine
Goroutine Scheduler
概述
调度器是go语言运行时最核心的内容,其基本理论建立在三种基本对象(系统线程对象M,抽象处理器对象P,goroutine对象G)
M、P、G关系
GO运行时存在两种类型队列(queue):
- 全局queue
- 每个P维护自己的G的queue
基本对象数据结构
M
P
G
- 调用
go func(){...}()
起一个协程,都会创建一个goroutine对象,代表G并发任务 - 所有的G任务都有系统线程M来执行
- 每个G对象都有自己的独立栈内存,当M执行任务时,从G用来保存执行现场的字段中恢复相关寄存值。
Reference
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!