跳到主要内容

Scheduler

scheduler 调度器

  • RESTful 的 http server
  • Timer(定时器)
  • 生产者/消费者 模型下的task runner

Go 的调度器负责把大量 goroutine 调度到有限的系统线程上执行。理解调度器有助于分析并发程序的性能和阻塞问题。

一、GMP 模型

名称含义
Ggoroutine,用户态轻量线程
Mmachine,系统线程
Pprocessor,调度上下文

调度器会把可运行的 G 放到 P 的队列中,再由 M 执行。

二、调度触发

常见触发时机:

  • goroutine 阻塞;
  • 系统调用;
  • channel 操作;
  • 定时器;
  • GC;
  • 主动调用 runtime.Gosched()

三、实践建议

  • 不要创建无限 goroutine。
  • 使用 worker pool 控制并发。
  • I/O 密集任务要设置超时。
  • CPU 密集任务关注 GOMAXPROCS