-
GMP模型就是对用户态线程的实现,Go的线程调度维护三种对象,或者从语言层面来讲,就是三个struct
-
Go语言的并发是由系统运行时调度器来实现的,该调度器会对GMP这三个对象进行调度
-
三个对象 。G就是goroutine,拥有自己的栈空间,定时器,栈空间初始值大小2KB,可以随需求增长;M带面machine,代表抽象化的内核线程,记录内核线程栈的信息,负责与G对接,当G被调度到该内核线程时,会使用G自己的栈信息;P表示调度器,负责调度goroutine,维护一个本地的goroutine,M从P处获得与G的对接,同时P还负责部分内存的管理
-
调度过程: