关于golang: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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理