Go GPM的理解 与 runtime包

理解GPM

Go语言的scheduler的实现原理

Go语言中支撑整个scheduler实现的主要有四个结构,分别是G、P、M、Sched,前三个定义在runrtime.h,Sched定义在proc.c中。

  • Sched结构就是调度器,维护了存储M和G的队列,以及调度器的一切状态信息
  • G是goroutine实现的核心结构,是对一个要并发执行的任务的封装,可以称作为用户态的线程,属于用户级资源,对操作系统透明,轻量级,可以大量创建,上下文的切换成本低。
  • P是Processor,逻辑处理器,主要作用是管理G对象,并为G在M上的运行提供本地化资源,他维护了一个goroutine队列runqueue,也可以理解为goroutine的上下文环境。
  • M是Machine,是利用系统调用创建出来的操作系统线程实体,作用是执行G中的并发任务,代表了一个内核线程,由操作系统管理,goroutine就是运行在M上的,M中维护了小对象内存mcache,当前执行的goroutine,随机数发生器等信息。

runtime包

runtime类似于Java或者.Net中的虚拟机,负责内存分配,垃圾回收,goroutine,chanel,切片,map,反射等等。

未完待续。。。。

参考资料:bilibili

你可能感兴趣的