GMP设计架构
GMP分别代表什么?
G:Goroutine
M: OS Thread
P:抽象概念(Processor),类似cpu的作用,将G调度到M上,进行绑定
所有的 P 都在程序启动时创建,并保存在数组中,最多有 GOMAXPROCS(可配置) 个
简单的发展历史!
最开始并没有P,所以G和M绑定之后,出现了很多问题,譬如一个任务很慢时,这个时候并没有动作可以解绑,为了解决类似问题,引入了P(Processor)调度器,相当于中间加了一层
Local RunQueue是什么?
本地等待运行的 G,存的数量有限,不超过 256 个。新建 G’时,G’优先加入到 P 的本地队列,如果队列满了,则会把本地队列中一半的 G 移动到全局队列,
LRQ 不加锁,GRQ加锁
Global RunQueue是什么?
存放等待运行的 G,加锁,LRQ都满了的时候,会放入GRQ
Network poll起到什么作用?
同步调度
异步调度