1. 本质差异:资源分配与执行单元
- 进程:操作系统资源分配的最小单位
-
- 独立内存空间,数据隔离(需IPC通信)
- 创建销毁成本高(复制父进程资源)
- 线程:CPU调度的最小单位(同进程内)
-
- 共享进程内存(需锁机制防数据竞争)
- 创建迅速,上下文切换快
2. GIL:Python多线程的“阿喀琉斯之踵”
- 核心矛盾:全局解释器锁(GIL)强制同一时刻仅一个线程执行字节码
-
- CPU密集型任务:多线程因GIL轮转导致性能反降
- I/O密集型任务:线程在I/O等待时释放GIL,仍可加速
# CPU密集型场景:进程效率碾压线程
import multiprocessing as mp
import threading
def compute(n):
while n > 0: n -= 1
# 多进程(4核)
mp.Pool(4).map(compute, [10**7]*4) # 耗时约1.2s
# 多线程(4线程)
[threading.Thread(target=compute, args=(10**7,)).start() for _ in range(4)] # 耗时约4.8s
3. 实战选型指南
|
场景 |
推荐方案 |
工具模块 |
|
CPU密集型(计算/加密) |
多进程 |
|
|
I/O密集型(爬虫/文件) |
多线程/协程 |
|
|
混合任务 |
进程+线程池 |
|
4. 进阶优化策略
- 进程间通信:
Queue、Pipe、共享内存(Value/Array) - 规避GIL:
-
- 使用C扩展(如NumPy释放GIL)
- 换用Jython/IronPython解释器
- 协程异步(
asyncio单线程并发I/O)
结语:
进程与线程并非对立,而是互补的并发工具链。理解GIL的底层逻辑,方能驾驭Python并发性能的临界点——CPU瓶颈靠进程突围,I/O阻塞借线程/协程破局。在分布式时代,更可结合celery等框架构建跨进程协作网络,释放多核战力。
全文完整版可扩展包含:进程池/线程池源码解析、协程与线程协作模式、asyncio事件循环原理等深度内容。
Python进程与线程:破解GIL困局

被折叠的 条评论
为什么被折叠?



