一张图看懂「进程、线程、协程」:工厂、工人与流水线
写代码常听人说什么“多进程”“多线程”“协程”,听着像绕口令。其实换个比喻就通了:工厂、工人、流水线。
一、进程 = 一家工厂
进程是操作系统分配资源的基本单位,就像一家独立工厂:有自己的地皮(内存空间)、自己的仓库、自己的账本。
工厂之间互不相干,A 厂着火不影响 B 厂(进程崩溃不拖垮别的)。但两家厂之间要交换东西,得走“专门的货车通道”(进程间通信 IPC),麻烦且慢。
二、线程 = 工厂里的工人
一家工厂里可以有很多工人(线程),他们共享同一块地皮和仓库(共享内存),所以互相传个工具很方便。
但麻烦也在这:两个工人抢同一台机器容易出乱子(线程安全问题),得加锁(mutex)排队用。
三、协程 = 工人手里的多条流水线
一个工人干活时,常常要等——比如等水烧开。
协程就是这个工人聪明地利用等待时间:水没开就先去切菜,水开了再回来倒水。它不真的多雇人,而是在一个工人内部自己切换任务,几乎零成本。
所以协程特别适合“大量等待”的场景(比如高并发网络请求),一个人就能同时照看成千上万件事。
四、一张表对比
| 工厂/工人 | 切换成本 | 共享 | 适合 | |
|---|---|---|---|---|
| 进程 | 独立工厂 | 高(要搬地皮) | 不共享 | 稳,互不影响 |
| 线程 | 同厂工人 | 中 | 共享内存 | CPU 密集、真并行 |
| 协程 | 工人内流水线 | 极低 | 同线程 | 高并发、多等待 |
一句话:进程是“分开的工厂”,线程是“厂里的人”,协程是“一个人见缝插针地多线操作”——越往右越轻、越省,但也越需要小心配合。