本文介绍golang
调度模型MPG
的历史版本,以便理解MPG模型。
基本概念#
在介绍之前,先补充几个基本的盖面
GM模型#
在golang1.0
版本中,调度模型是GM,没有引入P的概念。
在此模型中,只包含一个全局的可运行的队列schedt
。schedt
包含一个指向可运行队列头指针ghead
,一个指向
队列尾的gtail
指针。每pop出一个g,ghead
后移;每创建一个g,gtail
后移。
在代码中创建一个goroutine
,就会挂载到全局队列尾,gtail
后移指向新goroutine
。
M是线程,每次从队列头获取g,进行运行。