G
Goroutine,每一个goroutine都会有一个自己的栈空间,初始化时在2k,空间会随着需求增长。
M
Machine,即代表内核线程(线程)
P
Process,调度器,负责调度goroutine,维护一个本地goroutine队列,M从P上获取G并执行,同时负责部分内存的管理
GMP模型
golang 中线程(M)是运行 goroutine(G) 的实体,调度器§的作用是把可运行的 goroutine(G) 分配到工作线程(M)上。
1、全局队列:存放等待运行的 G。
2、P 的本地队列:同全局队列类似,存放的也是等待运行的 G,存的数量不超过 256 个。新建 G’ 时,G’ 优先加入到 P 的本地队列,如果队列满了,则会把本地队列中一半的 G 移到全局队列。P 列表:所有的 P 都在程序启动时创建,并保存在数组中,最多有 GOMAXPROCS(可配置) 个。
3、M:线程想运行任务就得获取 P,从 P 的本地队列获取 G,P 队列为空时,