跳到主要内容

GMP 调度模型

  • Go 的 GMP 调度模型(Goroutine Scheduler) 是 Go 语言实现高并发的核心机制
  • GMP 调度模型是协程调度模型
  • Go Scheduler核心

GMP 调度模型是什么​

  • 理解:G 是任务,M 是工人,P 是工位。工人必须坐到工位上,才能领任务干活
  • G(任务):需要执行的工作。
  • M(工人):真正干活的操作系统线程。
  • P(调度资源):给工人提供任务队列和运行 Go 代码所需的资源。
组件英文作用
GGoroutineGo 协程,代表一个需要执行的任务
MMachine操作系统线程,真正负责执行代码
PProcessor逻辑处理器,管理可运行的 G,为 M 执行 Go 代码提供调度资源

GMP 调度模型解决什么​

主要解决大量 goroutine 高效分配、调度和执行的问题

  • 降低资源消耗:大量 goroutine 可以复用 OS 线程
    • 线程复用,一个工人M(线程)可以负责多个任务(G)
  • 提高并发能力:一个 goroutine 阻塞,不影响其他 goroutine 执行
  • 充分利用多核 CPU:多个 M 可以在不同 CPU 核心上并行执行 Go 代码