GMP 调度模型
- Go 的 GMP 调度模型(Goroutine Scheduler) 是 Go 语言实现高并发的核心机制
- GMP 调度模型是协程调度模型
- Go Scheduler核心
GMP 调度模型是什么
- 理解:G 是任务,M 是工人,P 是工位。工人必须坐到工位上,才能领任务干活
- G(任务):需要执行的工作。
- M(工人):真正干活的操作系统线程。
- P(调度资源):给工人提供任务队列和运行 Go 代码所需的资源。
| 组件 | 英文 | 作用 |
|---|---|---|
| G | Goroutine | Go 协程,代表一个需要执行的任务 |
| M | Machine | 操作系统线程,真正负责执行代码 |
| P | Processor | 逻辑处理器,管理可运行的 G,为 M 执行 Go 代码提供调度资源 |
GMP 调度模型解决什么
主要解决大量 goroutine 高效分配、调度和执行的问题
- 降低资源消耗:大量 goroutine 可以复用 OS 线程
- 线程复用,一个工人M(线程)可以负责多个任务(G)
- 提高并发能力:一个 goroutine 阻塞,不影响其他 goroutine 执行
- 充分利用多核 CPU:多个 M 可以在不同 CPU 核心上并行执行 Go 代码