01什么是线程,什么是进程,两者的基础区别是什么?
文章目录
问题: 什么是线程,什么是进程,两者的基础区别是什么?
👇 点击展开/折叠 面试背诵模板(建议先背这个)
核心区别速览表
| 维度 | 进程 | 线程 |
|---|---|---|
| 本质 | 资源分配的基本单位 | CPU调度的基本单位 |
| 内存 | 独立地址空间(隔离) | 共享进程地址空间 |
| 切换开销 | 大(切换页表、刷新TLB) | 小(仅切换栈和寄存器) |
| 通信方式 | IPC(管道、消息队列、共享内存) | 直接读写共享变量 |
| 稳定性 | 一方崩溃不影响其他进程 | 一方崩溃影响整个进程 |
| 创建销毁 | 开销大,慢 | 开销小,快 |
适用场景选择
| 场景类型 | 推荐方案 | 原因 |
|---|---|---|
| CPU密集型(复杂计算、视频解码) | 多进程 | 充分利用多核,绕过GIL限制 |
| I/O密集型(网络爬虫、文件读写、Web服务) | 多线程 / 协程 | 线程在IO阻塞时释放GIL,切换开销小 |
| 高并发、海量任务 | 协程(如asyncio) | 比线程更轻量,无需锁机制 |
Python 中 GIL 对线程和进程的影响
Python 的 GIL(全局解释器锁) 限制了同一时刻仅有一个线程执行 Python 字节码,导致多线程在 CPU 密集型任务中无法利用多核优势,实际表现为串行。多进程则每个进程拥有独立的解释器和锁,可充分利用多核,但创建开销大且通信成本高。因此 Python 多线程适用于 I/O 密集型任务(I/O 等待时释放 GIL),多进程适用于 CPU 密集型任务。
进程与线程的协作关系(数据结构视角)
- 进程:操作系统通过 PCB(进程控制块)管理,包含 PID、内存指针、打开文件列表等。
- 线程:操作系统通过 TCB(线程控制块)管理,包含 TID、程序计数器、寄存器、栈指针,并指向所属进程的 PCB。
进程拥有独立的页表(虚拟地址映射),线程共享同一页表,这是两者内存隔离与共享的底层硬件基础。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LGQ的博客!