对于GMP模型的理解

140 阅读1分钟
  1. GMP模型就是对用户态线程的实现,Go的线程调度维护三种对象,或者从语言层面来讲,就是三个struct

  2. Go语言的并发是由系统运行时调度器来实现的,该调度器会对GMP这三个对象进行调度

  3. 三个对象 。G就是goroutine,拥有自己的栈空间,定时器,栈空间初始值大小2KB,可以随需求增长;M带面machine,代表抽象化的内核线程,记录内核线程栈的信息,负责与G对接,当G被调度到该内核线程时,会使用G自己的栈信息;P表示调度器,负责调度goroutine,维护一个本地的goroutine,M从P处获得与G的对接,同时P还负责部分内存的管理

  4. 调度过程:

image.png

image.png

image.png

image.png