共计 534 个字符,预计需要花费 2 分钟才能阅读完成。
了解 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
正文完