🐍Python 并发与异步
GIL与多线程多进程
面试回答
常见问法
GIL 是什么?它到底限制了什么?
回答
GIL 是全局解释器锁。在 CPython 中,同一时刻通常只有一个线程能执行 Python 字节码。它不是说“Python 不能并发”,而是限制了 CPU 密集型 Python 代码在线程间真正并行执行。
因此常见结论是:
- IO 密集:多线程通常仍然有价值
- CPU 密集:更常用多进程
from threading import Thread
from multiprocessing import Process
追问
- 为什么 IO 密集任务在线程里仍然有效
- 多进程为什么能绕过 GIL
- GIL 是 Python 语言限制还是 CPython 实现细节
原理展开
当线程等待网络、磁盘等 IO 时,会让出执行机会,因此多线程仍然能提升 IO 场景吞吐。
但如果是纯 Python 计算:
- 多个线程会轮流拿 GIL
- 真正 CPU 并行度上不去
多进程则因为每个进程有独立解释器和独立 GIL,更适合 CPU 密集任务。
面试速答可以是: “GIL 限制的是同一进程内多个线程同时执行 Python 字节码,不等于 Python 完全不能并发。”
易错点
- 说成“Python 不能多线程”
- 不区分 IO 密集和 CPU 密集
- 把 GIL 当作所有 Python 实现都完全一致的规则