进程、线程和协程切换的比喻
进程、线程和协程切换的比喻
1. 进程切换像白宫换总统
想象进程是一个国家的白宫,切换进程就像换总统:
- 不只是换一个人进去,
- 还要重新安排办公室装修、安保、机密文件搬运,
- 办公室里的家具、电话、文件柜都要重新调整,
- 安全措施要更新,流程复杂且耗时长。
所以,进程切换开销非常大,系统必须做很多准备工作。
2. 线程切换像换工位
线程在同一个进程里,就像一家公司里的不同员工:
- 换线程像员工换工位,
- 需要搬一下电脑、调换屏幕、把办公桌上的东西挪挪,
- 还得通知公司调度员安排顺序,
- 虽然没有进程切换那么复杂,但也要耗费时间和精力。
线程切换开销中等,需要操作系统帮忙管理和协调。
3. 协程切换像麦当劳找座位
协程(Go 里的 goroutine)就像你去麦当劳找座位:
- 找个空桌子坐下,
- 不需要搬电脑、不用重新装修、也不必通知管理员,
- 你自己决定什么时候坐下、什么时候起身,
- 切换非常快,几乎没有额外开销。
协程切换完全在用户自己手里完成,不依赖操作系统,轻量且高效。
小结
- 进程切换重,慢,资源消耗大;
- 线程切换中等,系统帮忙但成本仍高;
- 协程切换轻,快,由程序自己调度,资源占用极少。
这就是为什么 Go 可以用少量线程同时跑成千上万的协程,实现高并发又节省资源。