外观
一句话答案
上下文切换保存/恢复 CPU 寄存器,进程切换还需切换页表导致 TLB 失效;线程切换比进程快,协程比线程更快。
核心要点
开销来源:
- 保存/恢复 CPU 寄存器
- 进程切换:页表切换 + TLB 全失效
- Cache 冷启动
量级: 进程切换 ~数十微秒,线程切换 ~数微秒
减少: 协程(用户态调度) / 线程池(复用线程) / IO多路复用(减少线程数)
追问与易错
追问方向:
- 怎么减少上下文切换?
- 怎么监控切换次数?
- 自愿和非自愿切换区别?
易错点:
- ❌ 上下文切换开销可忽略——高频时显著影响性能
- ❌ 混淆进程和线程切换开销
💡 记忆锚点
上下文切换像换人上场打游戏:要保存当前玩家的进度(寄存器),加载新玩家的存档。进程切换最贵——还要换整个游戏地图(页表切换+TLB全失效,数十微秒);线程切换只换角色不换地图(共享地址空间,数微秒);协程切换在用户态自己换,连裁判(OS)都不用叫,最快。