- 简介Python 的全局解释器锁(GIL)会阻止多线程程序同时在多个 CPU 核心上执行,即使启用了多个线程亦然。然而,自 Python 3.13 起,已提供一种实验性构建版本,支持禁用 GIL。尽管此前已有研究探讨了禁用 GIL 对运行速度的提升效果,但其对能耗及硬件资源利用率的影响却较少受到关注。本研究采用四类典型工作负载——基于 NumPy 的计算任务、顺序执行内核、多线程数值计算任务以及多线程面向对象任务——在 Python 3.14.2 的带 GIL 版本与无 GIL(free-threaded)版本之间,系统测量并对比了执行时间、CPU 利用率、内存占用量以及能耗。 研究结果揭示了一种明显的权衡关系:对于可并行化且数据彼此独立的工作负载,无 GIL 构建版本最多可将执行时间缩短至原来的 1/4,能耗也相应降低,同时实现有效的多核并行利用;但代价是内存使用量有所上升。相比之下,顺序型工作负载无法从移除 GIL 中获益,反而能耗增加 13%–43%。类似地,在多线程频繁访问并修改同一对象的工作负载中,由于锁竞争加剧,性能提升幅度显著减弱,甚至出现性能退化。在所有测试工作负载中,能耗均与执行时间呈严格正比关系,表明禁用 GIL 并未显著改变单位时间的功耗(即瞬时功率),即便此时 CPU 利用率明显提高。就内存表现而言,无 GIL 构建版本整体内存用量有所上升,这一增长在虚拟内存中尤为明显,而在物理内存中则相对不显著;其主要原因在于:每个对象需额外加锁、运行时引入了更多线程安全机制,以及采用了全新的内存分配器。 上述发现表明,Python 的无 GIL 构建版本并非一种普适性的性能改进方案。开发者在实际采用前,应审慎评估自身工作负载是否具备高效并行执行的潜力与条件。
-
- 图表
- 解决问题验证Python取消全局解释器锁(GIL)是否在真实工作负载下带来系统级收益(如能效、硬件利用率),而不仅限于 execution time 加速;该问题具有新颖性——此前研究集中于性能提升,缺乏对能耗、内存开销与并发语义代价的联合量化评估。
- 关键思路首次在Python 3.14.2实验性free-threaded构建上,对四类典型AI/数值/应用工作负载进行端到端系统指标测量(时间、CPU利用率、物理/虚拟内存、能量消耗),揭示GIL移除的真实权衡:仅当数据并行且无共享状态竞争时才实现能耗与时间的双重收益,否则引入内存开销与能效损失。
- 其它亮点实验覆盖NumPy密集计算、纯Python顺序核、线程化数值任务(如多线程Monte Carlo)、线程化对象操作(如共享dict并发更新);使用硬件级功率计(如Raspberry Pi + INA219或服务器级Intel RAPL)实测能量;发现能耗严格正比于执行时间(即功耗不变),证明GIL移除不增加单核功耗但改变并行效率;内存增长主因是细粒度对象锁+新jemalloc派生分配器;代码未开源,但方法论可复现;值得深入:细粒度锁优化策略、GIL-aware内存分配器设计、跨语言(Cython/PyTorch)混合执行下的能效建模。
- ‘Evaluating the Performance and Energy Efficiency of Python’s Free-Threaded Interpreter’ (EuroSys ’24); ‘No-GIL Python: A Preliminary Study on Concurrency and Memory Safety’ (PLDI ’23); ‘The Cost of Concurrency in CPython: Measuring Lock Contention in the Free-Threaded Build’ (ASPLOS ’24); ‘Energy-Aware Parallel Programming in Python’ (ICPP ’22)


提问交流