#11 Python 中等

Python 的 GIL 是什么?对多线程/多进程选型有什么影响?

GIL并发性能

🎯 考察意图

后端/数据岗基础功。考察是否理解 CPython 并发真相,避免「开了多线程就并行」的幻觉。

📐 回答框架

  1. GIL:同一时刻仅一个线程执行 Python 字节码。
  2. CPU 密集 vs IO 密集选型。
  3. 替代: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 用线程/异步。