python中的 GIL全局解释器锁

GIL 的全称是 Global Interpreter Lock(全局解释器锁)。以下是关键点总结:

核心概念

  1. 定义
    Python 解释器(如 CPython)中的一个互斥锁,用于确保同一时刻只有一个线程执行 Python 字节码。

  2. 目的

    • 保护 Python 内部数据结构(如引用计数)的线程安全。
    • 简化 CPython 解释器的实现(避免复杂的锁机制)。
  3. 影响

    • 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 语言本身的特性。

posted @ 2025-08-29 12:05  清澈的澈  阅读(20)  评论(0)    收藏  举报