看你会golang,讲下go的协程模型?(GPM模型)

题目来源:字节跳动

答案1:

go协程使用GPM调度模型实现,具体内容如下:

  • G : goroutine协程

  • P:process 调度器,为每一个m分配g

  • M:machine 对应操作系统的线程,g的真正执行者。

P的数量默认是CPU核数,也可以通过GOMAXPROCS来指定数量,每个P都会维护一个runq队列,用于保存G,P会从队列头获取G交给M执行,执行完后放入到队列尾(如果需要继续执行),通过GPM模型实现了多个协程并执行,可以最大限度地利用到CPU