结论:Python 3.13 引入实验性的 free-threading 构建(PEP 703,python3.13t),可以在编译期去掉 GIL,让多线程纯 Python 代码真正并行跑在多核上。它是可选构建而非默认行为,默认 CPython 仍带 GIL。
展开:去掉 GIL 后必须重建线程安全的内存管理:1)引用计数改成分片/偏置计数(biased reference counting)——所有者线程用普通计数、其他线程用原子计数,避免每次赋值都原子操作;2)容器内部操作(list.append、dict 读写)加细粒度锁,保证单操作原子性,但复合操作仍需应用层同步;3)垃圾回收改为延迟/停止世界的分代处理。影响面:多线程 CPU 密集任务获得近线性加速,但单线程性能有 5–10% 的回退(锁和计数开销);C 扩展必须声明支持 free-threading,否则导入时自动回退启用 GIL。易错点:去 GIL 不等于线程安全——x += 1 这种复合操作在字节码层面仍可被打断,竞态照旧存在,锁、队列照样要用;迁移路径与 asyncio 不冲突,asyncio 单线程模型不受影响。
python3.13t -c "import sys; print(sys._is_gil_enabled())" # False
追问方向:PEP 703 的三阶段路线图、subinterpreter(PEP 734)与 free-threading 的定位差异。