gmp

golang的GMP模型是用于实现高并发调度的核心机制。它通过 G(goroutine)+ M(machine)+ P(processor) 三个角色协同工作,使 Go 可以高效运行成千上万个 goroutine。

  • Goroutine(协程)
  • Processor(逻辑处理器)
  • Machine(系统线程)
HTTP 请求到达
      ↓
创建 goroutine (G_new, 由 go runtime 创建)
      ↓
加入 P 本地队列
      ↓
若本地队列满 → 转入 Global Queue
      ↓
M + P 调度执行
      ↓
若 P 队列空 → 从 Global Queue 取
      ↓
若 Global Queue 也空 → Work Stealing
      ↓
执行请求逻辑
      ↓
请求完成(G_new生命周期结束)

        +---- P0 ----+
        | G1 G2 G3   |
        +------------+
             ↑
             |
             M0

        +---- P1 ----+
        | G4 G5 G6   |
        +------------+
             ↑
             |
             M1

P 的数量 = 默认等于 CPU 核数,可以通过设置GOMAXPROCS配置
M + P -> 才能运行 G
P.localQueue -> G -> M 执行


Comments