python中的 GIL全局解释器锁
GIL 的全称是 Global Interpreter Lock(全局解释器锁)。以下是关键点总结:
核心概念
-
定义:
Python 解释器(如 CPython)中的一个互斥锁,用于确保同一时刻只有一个线程执行 Python 字节码。 -
目的:
- 保护 Python 内部数据结构(如引用计数)的线程安全。
- 简化 CPython 解释器的实现(避免复杂的锁机制)。
-
影响:
- CPU 密集型任务:多线程无法利用多核 CPU(线程需轮流获取 GIL)。
- I/O 密集型任务:影响较小(线程在 I/O 等待时会释放 GIL)。
- 替代方案:多进程(
multiprocessing)、异步编程(asyncio)或使用其他解释器(如 Jython)。
简单示例
import threading
def count_up():
n = 0
for _ in range(10_000_000):
n += 1
# 两个线程竞争 GIL
t1 = threading.Thread(target=count_up)
t2 = threading.Thread(target=count_up)
t1.start(); t2.start()
t1.join(); t2.join()
# 实际执行时间 ≈ 单线程的两倍(非并行)
笔记要点
| 特性 | 说明 |
|---|---|
| 作用范围 | 仅限 CPython(其他解释器如 PyPy/Jython 无 GIL) |
| 释放时机 | I/O 操作、time.sleep()、C 扩展手动释放(如 NumPy) |
| 规避方法 | 多进程、C 扩展、异步 I/O、使用无 GIL 的解释器 |
| 设计原因 | 历史遗留 + 简化内存管理(引用计数) |
| 未来趋势** | Python 3.13+ 正在实验无 GIL 模式 |
注:GIL 是 CPython 的特定实现,不是 Python 语言本身的特性。

浙公网安备 33010602011771号