Scheduler
scheduler 调度器
- RESTful 的 http server
- Timer(定时器)
- 生产者/消费者 模型下的task runner
Go 的调度器负责把大量 goroutine 调度到有限的系统线程上执行。理解调度器有助于分析并发程序的性能和阻塞问题。
一、GMP 模型
| 名称 | 含义 |
|---|---|
| G | goroutine,用户态轻量线程 |
| M | machine,系统线程 |
| P | processor,调度上下文 |
调度器会把可运行的 G 放到 P 的队列中,再由 M 执行。
二、调度触发
常见触发时机:
- goroutine 阻塞;
- 系统调用;
- channel 操作;
- 定时器;
- GC;
- 主动调用
runtime.Gosched()。
三、实践建议
- 不要创建无限 goroutine。
- 使用 worker pool 控制并发。
- I/O 密集任务要设置超时。
- CPU 密集任务关注
GOMAXPROCS。