GIL(全局解释器锁)是 CPython 解释器中的一把互斥锁,保证任意时刻只有一个线程在执行 Python 字节码。它存在的根本原因是 CPython 的内存管理(引用计数)不是线程安全的,用一把大锁保护所有对象的引用计数操作,实现简单且对单线程性能开销小。
主要影响:
- CPU 密集型多线程几乎无法并行:多个线程在同一进程内只能交替执行字节码,多核利用率低,甚至因锁竞争比单线程更慢。
- I/O 密集型多线程仍然有效:线程在阻塞 I/O(网络、文件读写、sleep)时会释放 GIL,其他线程得以运行。
- C 扩展(如 NumPy)在重计算时也可以主动释放 GIL,从而获得并行能力。
易错点:GIL 是 CPython 的实现细节,不是 Python 语言规范——Jython、IronPython 没有 GIL。另外 GIL 并不意味着线程安全有保证,它只是保护字节码级别,业务逻辑(如 count += 1 的多步操作)仍需自行加锁。追问方向:如何绕过 GIL(多进程、异步、no-GIL 版本)、Python 3.13 引入的 free-threading 实验性构建。