golang 早期调度器的实现原理
文章目录
golang 早期调度的实现原理
老调度器的几个缺点:
- 创建、销毁、调度 goroutine 都需要每个 M获取锁, 这就形成了激烈的锁竞争。
- M 转移 G 会造成延迟和额外的系统负载
- 系统调用(CPU 在 M之间的切换)导致频繁的协程阻塞和取消阻塞操作增加了系统开销。
多进程和多线程的缺点
- 设计复杂:
- 进程线程数量越多,切换成本就越大,也就越是浪费
- 搞CPU 调度消耗
进程占用内存: 虚拟内存 4GB
线程占用内存 约为 4MB
协程 引发的问题?
N:1
无法利用 多个 CPU1:1
切换协程成本昂贵M:N
能够利用多核的优势
早期 go语言调度器 使用 队列 处理 协程, 多个线程切换调度队列的任务。
文章作者 LYR
上次更新 2021-08-14