| 代号 | 名称 | 定义位置 | 作用 |
|---|---|---|---|
| Sched | 调度器 | proc.c | 维护有存储 M 和 G 的队列以及一些调度器的状态信息 |
| G | goruntine 实现的核心结构 | runtime.h | 存储了goruntine的执行stack信息、goruntine状态以及goruntine的任务函数等 |
| M | Machine 系统线程 | runtime.h | 由操作系统管理的, goruntine 就是跑在 M 之上的;维护了当前执行的Goruntine、随机数发生器 |
| P | Processor 处理器 | runtime.h | 执行 Goruntine,如果线程想运行 goruntine,必须先获取 P。维护了 Goruntine 队列,即 ruqueue。从 N:1 调度到 M:N 调度的重要部分,最多存放256个。GOMAXPROCS 设置 P 的数量,最多有 GOMAXPROCS 个线程分布在多个 CPU 上同时运行。GOMAXPROCS 也限制了并发的程度,比如 GOMAXPROCS = 核数/2,则最多利用了一半的 CPU 核进行并行。 |