Python 新提案:删除全局解释器锁 GIL,解放多线程性能 未来性能将提升3000%


据 Python 基金会博客介绍,开发者 Sam Gross 在 2022 Python 语言峰会上带来了一个新提案:完全移除 CPython 解释器的 GIL- 全局解释器锁,使 Python 程序获得更快的性能 —— 尤其是多线程程序。 Python 有多个版本,包括 JVM 、 .NET CLR  解释器以及编译器,但该语言的核心实现仍是 CPython 解释器。由于 CPython 的内存管理非线程安全,因此设计了 CPython 的 GIL (Global Interpreter Lock - 全局解释器锁),以防止竞争条件并确保线程安全。 GIL 是一个互斥锁,只允许一个线程持有 Python 解释器的控制权,从而保护对 Python 对象的访问,防止多个线程同时执行 Python 字节码。

但事后看来,GIL 并不理想,因为它阻止了多线程的 CPython 程序充分利用多核处理器的性能。但由于 GIL 长期存在,许多官方和非官方 Python 包和模块都深度融合了 GIL 模块,移除 GIL 功能的工作变得任重而道远。此前,开发者 Larry Hastings 在其 “Gilectomy” (GIL 切除手术)项目中试图完成 CPython GIL 功能的移除,但该项目失败了,因为它使单线程 Python 代码显着变慢。

而此次 Python 语言峰会带来了另外一个项目 “nogil”该项目由 Meta 开发人员 Sam Gross 主持,从项目名称不难看出,这也是一个专注于移除 GIL 的项目。参考了 Gilectomy 项目的失败经验, Sam Gross 意识到 :如果要使 Python 在没有 GIL 的情况下有效工作,则需要添加新的锁,以确保它仍然是线程安全的。然而,向现有代码添加新锁可能非常困难,因为新的锁可能会导致在部分领域的性能大幅下降。

据  Python 基金会的介绍,Gross 将发明一种新型锁,一种“更吉利”的锁。如果顺利的话,这个新锁很可能在 Python 3.12 版本亮相,因为 Gross 的提案就是“在 Python 3.12 中引入一个新的编译器标志,该标志将禁用 GIL。”


相关文章

2023-01-13

言峰会上,开发者 Sam Gross 带来了新提案:删除全局解释器锁 GIL,解放多线程性能。但由于 GIL 历史悠久,许多官方/非官方的 Python 包和模块都深度融合了 GIL 模块,彻底移除 GIL 功能可能会对生态造成影响。在 2023 年 1

2022-05-19

快的运行时,这些优化大部分来自于 PEP 659  :自适应解释器,它运作思路跟 JIT 有点相似,都是识别热点代码,但自适应解释器的工作范围无法脱离字节码。目前 PEP 659 提案的工作基本完成,但 for 循环和二进制操作的动态

2023-04-11

了 CPython,允许开发者在一个进程中同时运行多个 Python 解释器。然而,多个解释器在同一进程中运行时,并不能真正地相互隔离。同一进程中的解释器始终共享大量全局状态。这是很多错误的来源,随着越来越多的人使用该功

2022-06-01

起commit决议时,意外造成全局锁释放的问题 [#4174] 修复删除 undolog 时连接关闭问题 [#4189] 修复 kafka-appender.xml 和 logstash-appender.xml 配置文件表达式中的默认值问题。 [#4213] 修复部分"sessionMode"代码未执行导致启动失败问题

2022-04-28

使用ALGORITHM=INSTANT,执行ALTER TABLE ... DROP COLUMN语句,在线删除列。 克隆:增加系统变量“clone_delay_after_data_drop”,允许在接收者删除数据之后增加延时,以使接收者在开始克隆之前释放足够的空间。 更多详细内容可访问官网。

2022-11-05

兼容了MySQL 存储过程语法,支持存储过程的创建、修改、删除等管理操作。同时引入了PL Engine引擎支持存储过程的运行、以及运行的内存管理,支持GB级别的大事务和2小时的长事务等。 CREATE PROCEDURE pro_test() BEGIN DECLARE a CHAR(1

2022-03-01

特性,主要更新内容是完全重写网络堆栈,以提升功能和性能。此外还有许多其他的变更,包括改进 Podman 对 Mac 和 Windows 的支持、改进 Pods、超过 50 个错误修复等。 除了现有的 CNI 堆栈之外,Podman 现在还支持基于 Netavark 和

2023-04-24

呀, 为啥? 因为你构建操作系统的时候, 有可能 Python 解释器和很多库还没有移植到新的芯片上, 这时候只能用Shell脚本。客观的说, 我Shell用的不是很好, 佩服那些Shell代码一屏一屏写, 一次搞对的系统架构大牛们。 18: QM

2022-04-12

oid  版本两年内的 API level 为目标,将会被从 Play Store 中删除。 现有应用程序的 API level targeting requirement 这一变化旨在迫使应用程序开发人员采用更严格的 API 策略来支持较新的 Android 版本,通常是更好的权限管理和撤销、

2022-02-10

试中(分数越高越好,PHPBench 执行大量测试,以便对 PHP 解释器的各个方面进行评估),64 位性能则是提升了约 54%。 虽然上述的测试结果已经表明在同等测试环境下,64 位操作系统的性能相比 32 位有了大幅提升,但这

2022-07-05

该应用正在运行中,点击停止按钮可以停止一个应用。 删除一个SpringBoot应用,双击选择应用列表中某个应用,点击删除应用的按钮,可以将该应用删除。 启动项目中全部应用,打开Wooca项目后,可以使用工具栏中“全部启动

2023-04-12

下:它不是预构建的 Python 软件包,而是预构建的 Python 解释器。 此提案定义了一个标准的打包文件格式来保存预构建的 Python 解释器,并尽可能重用现有的 Python 打包标准。 命名格式:{distribution}-{version}[-{build tag}]-{platform tag}

2023-05-06

I 基础设施公司 Modular AI 最近发布的编程语言,它结合了 Python 的语法以及 C 语言的可移植性和性能,目标是使其成为 AI 研究和生产的理想选择。 根据介绍,Mojo 不仅兼容 Python,还比它快 35000 倍。详情查看:AI 开发有了新编程

2022-12-20

持开关支持动态配置 [#4490] tccfence 记录表优化成按索引删除 [#4911] 添加 header 和license 检测 [#4917] 升级 package-lock.json 修复漏洞 [#4924] 优化 pom 依赖 [#4932] 抽取部分配置的默认值 [#4925] 优化 javadoc 注释 [#4921] 修复控制台模