进程 / 线程 / 协程(面试速记)
面试向:一页区分进程/线程/协程,含内存共享、调度单位、开销与典型陷阱。
#resource / operating-system
#type / concept
#status / evergreen
[!info] related notes 操作系统 MOC 进程&线程&协程(长文) JavaScript中的进程、线程与协程 worker-threads
进程 / 线程 / 协程(面试速记)
一句话:
- 进程:资源分配与隔离的基本单位
- 线程:CPU 调度的基本单位(进程内执行流)
- 协程:用户态调度的轻量执行单元(切换由程序控制)
1) 进程
- 拥有:独立地址空间、文件描述符、内核对象等
- 优点:隔离强、崩溃影响面更小
- 代价:创建/切换/通信成本更高(IPC)
2) 线程
- 同进程线程共享:代码段、数据段、堆、打开文件、地址空间
- 线程私有:PC、寄存器、栈
- 优点:共享数据方便,切换比进程轻
- 风险:共享导致竞态/死锁/可见性问题,一个线程崩溃可能带崩进程
3) 协程
- 用户态调度,切换开销小
- 常用于高并发 I/O:大量任务在等待 I/O,不适合“一任务一线程”
- 是否能利用多核取决于运行模型(单线程协程通常不并行)
高频陷阱
- “并发”不等于“并行”
- 线程共享内存所以要同步;进程隔离所以通信要 IPC
- 协程不是 OS 线程:协程切换不等于线程切换