看你会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