Golang—— GMP模型发展(一)

一、前言
Golang语言的关键点之一:协程;相对于线程而言,协程是一个更轻量级的线程。在讲到协程的时候,不可避免的要讲到GMP模型,而GMP模型的前身是GM模型。
二、GM与GMP
Go1.1版本(2012年)之前用的都是GM模型,但是由于GM模型性能不好,之后官方对调度器进行了改进,演化为现在的GMP模型。
GM模型
GM模型中的G全称为Goroutine协程,M全称为Machine内核级线程,其调度过程如下:

M(内核级线程)从加锁的Goroutine队列中获取G(协程)执行,如果G在运行过程中创建了新的G,那么新的G也会被放在全局队列中。
基于以上设计存在两个不足之处:
调度,返回G都需要获取队列锁,形成了激烈竞争。M转移G没有把资源最大化利用。比如当M1在执行G1时,M1创建了G2,为了继续执行G1,则需要把G2交给M2执行,因为G1和G2是相关的,而寄存器中会保存G1的信息,因此G2最好是放在M1上执行,而不是其他M。
GMP模型
GMP模型是在GM模型基础上增加了一个P层。
G:goroutine,协程

Golang—— GMP模型发展(一)最先出现在Python成神之路

版权声明:
作者:Alex
链接:https://www.techfm.club/p/22228.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>