Unlocking Python's Cores: Hardware Usage and Energy Implications of Removing the GIL

该研究评估了 Python 3.14.2 无 GIL 实验构建版的性能,发现其虽能通过有效利用多核将独立并行任务的执行时间和能耗降低至四分之一,但会导致内存占用增加,且对顺序任务或存在锁竞争的场景反而会造成能耗上升和性能退化,表明开发者需根据具体工作负载特性谨慎选择是否启用该功能。

José Daniel Montoya Salazar

发布于 2026-03-06
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文探讨了一个关于 Python 编程语言的重大技术变革:移除“全局解释器锁”(GIL)到底好不好用?它真的能省电吗?

为了让你轻松理解,我们可以把 Python 程序想象成一家繁忙的餐厅,而 CPU 核心就是厨师

1. 背景:以前的“独裁”模式(GIL)

在旧版本的 Python 中,有一个叫 GIL(全局解释器锁) 的机制。

  • 比喻:想象这家餐厅虽然雇佣了 12 个厨师(12 个 CPU 核心),但老板规定:无论有多少厨师,同一时间只能有一个厨师拿着“炒勺”(执行代码)在灶台前干活。其他 11 个厨师只能排队等待,或者在旁边发呆。
  • 后果:即使你的电脑有强大的多核处理器,Python 程序也跑不满,效率很低。这就好比有 12 个厨师,却只开一个灶台,浪费了大量人力。

2. 变革:新的“自由”模式(无 GIL)

从 Python 3.13/3.14 开始,实验性地允许移除这个锁

  • 比喻:老板解除了禁令,允许所有厨师同时拿起炒勺干活。理论上,12 个厨师一起炒,速度应该快 12 倍,而且因为干得快,餐厅(系统)用的总电量(能源)应该更少。
  • 疑问:真的这么完美吗?会不会因为厨师们互相抢锅、抢食材,反而乱成一团,导致更慢、更费电?

3. 研究结果:并不是“一刀切”的好事

作者通过大量的实验(就像让餐厅在不同菜单下试跑),发现了三种截然不同的情况:

情况 A:全是“外包”的硬菜(NumPy 场景)

  • 场景:餐厅里最难的菜(比如处理海量数据)其实不是厨师炒的,而是直接叫了外卖(调用 C/C++ 等底层库,如 NumPy)。
  • 结果:不管有没有锁,厨师们都在等外卖。
  • 结论:移除锁没有任何帮助,速度没变,电费也没变。

情况 B:全是“排队”的慢工(纯 Python 顺序任务)

  • 场景:餐厅只有一道菜,必须按顺序一步步做(比如数数、排序),没法分给多人做。
  • 结果
    • 以前(有锁):厨师 A 拿着炒勺,动作很利索。
    • 现在(无锁):厨师 A 虽然还是一个人干,但他得时刻担心“会不会有其他厨师突然冲进来抢我的炒勺”,所以他得频繁地检查、上锁、确认。
    • 比喻:就像你一个人走路,以前是自由走;现在虽然没人抢你,但你每走一步都要停下来确认“后面没人追我”,结果反而走得更慢了
  • 结论:对于这种单线程任务,移除锁反而慢了 30%-40%,因为费电的时间变长了,总耗电量反而增加了

情况 C:真正的“多厨师”协作(并行计算)

  • 场景:餐厅要炒 1000 盘不同的菜,每盘菜互不干扰(比如 1000 个独立的数学计算)。
  • 结果
    • 以前:12 个厨师轮流炒,12 个人干 1 个人的活,慢得要死。
    • 现在:12 个厨师同时开工,每人炒自己的菜,互不干扰。
    • 结论:速度提升了4 倍!虽然厨师们同时开火瞬间功率大了,但因为完工时间大大缩短总耗电量反而减少了 70% 以上。这是最理想的情况。

情况 D:混乱的“抢锅”现场(共享数据冲突)

  • 场景:12 个厨师都要去同一个大锅里加盐,或者都要修改同一张菜单
  • 结果
    • 厨师们开始互相打架、推搡、排队等对方把盐瓶放下。
    • 为了安全,他们不得不频繁地“上锁”(比如厨师 A 拿盐时,厨师 B 必须等)。
    • 比喻:大家越忙越乱,最后不仅没变快,反而比原来慢了好几倍,而且因为一直在争吵和等待,总耗电量爆炸式增长(甚至增加了 12 倍!)。
  • 结论:如果代码里大家频繁修改同一个数据,移除锁就是灾难。

4. 另一个代价:内存“占地”变大了

  • 比喻:为了让大家能安全地同时干活,餐厅不得不给每个厨师发一套额外的工具包(每个对象都要加锁),还要多租一块巨大的备用仓库(虚拟内存)。
  • 结果:无论干得快慢,新版本的 Python 程序占用的内存空间(特别是虚拟内存)都明显变大了。对于内存很小的设备(如嵌入式设备),这可能是一个问题。

5. 核心发现:省电的秘诀是“快”

论文得出了一个非常直观的结论:
“快就是省”。

  • 只要程序能利用多核并行跑得快,总耗电量就会大幅下降
  • 如果程序因为移除锁而变慢了,总耗电量就会上升
  • 对于大多数 Python 应用来说,优化运行时间 = 优化能源效率

6. 给开发者的建议(总结)

这篇论文告诉我们要理性看待这个新技术:

  1. 不要盲目升级:如果你的程序主要是单线程的,或者大家经常抢着改同一个数据,千万别用无锁版本,否则又慢又费电。
  2. 适合的场景:如果你的程序是处理大量独立数据(比如科学计算、AI 训练中的某些部分),并且能充分利用多核,那么无锁版本是神器,能大幅省电提速。
  3. 内存考量:如果你的服务器内存很紧张,要谨慎,因为新版本会多占一些内存。

一句话总结
移除 GIL 就像给餐厅解除了“单灶台”限制。如果菜能分开做,效率翻倍、电费大降;如果菜必须排队做,或者大家抢同一个锅,那反而会更慢、更费钱。它不是万能药,而是一把需要看菜下饭的专用工具