Python 的 GIL 是什么?对多线程/多进程选型有什么影响?
GIL并发性能
考察意图
后端/数据岗基础功。考察是否理解 CPython 并发真相,避免「开了多线程就并行」的幻觉。
回答框架
- GIL:同一时刻仅一个线程执行 Python 字节码。
- CPU 密集 vs IO 密集选型。
- 替代:multiprocessing、异步 IO、C 扩展释放 GIL。
参考答案(口述版)
GIL(全局解释器锁)是 CPython 的机制:同一进程内同一时刻只有一个线程在执行 Python 字节码,用来简化内存管理。
影响:
- CPU 密集(纯 Python 计算):多线程几乎不能加速,反而可能更慢 → 用多进程(multiprocessing)或把计算下沉到 NumPy/原生扩展
- IO 密集(等网络/磁盘):线程在 IO 时会释放 GIL,多线程仍有用;也可用 asyncio
数据场景常见做法:Pandas/Spark 本身释放或绕开 GIL 限制;本地并行预处理用进程池;爬虫/请求用线程或异步。
注意:GIL 不是语言语法的一部分,PyPy 等实现不同;回答时点明「主要针对 CPython」。
关键词
CPythonCPU vs IO多进程asyncio
面试官可能的追问
追问 1:为什么 NumPy 大数组运算可以较好地利用多核?
多数计算在释放了 GIL 的 C/Fortran 层完成,不占用 Python 字节码执行路径。
常见踩坑
- CPU 任务盲目 ThreadPool,结果变慢
- 多进程间大数据通信开销被忽略
记忆锚点
GIL 下:CPU 用进程,IO 用线程/异步。