Python 新提案:删除全局解释器锁 GIL,解放多线程性能

频道:行业资讯 日期: 浏览:178

据Python基金会博客介绍,开发者萨姆总值在2022年Python语言峰会上带来了一个新提案:完全移除CPython的解释器的吉尔-全局解释器锁,使Python程序获得更快的性能,尤其是多线程程序。

Python 新提案:删除全局解释器锁 GIL,解放多线程性能

Python有多个版本,包括JVM、。net CLR解释器以及编译器,但该语言的核心实现仍是CPython的解释器。由于CPython的内存管理非线程安全,因此设计了CPython的吉尔(全局解释器锁-全局解释器锁),以防止竞争条件并确保线程安全。吉尔是一个互斥锁,只允许一个线程持有Python解释器的控制权,从而保护对Python对象的访问,防止多个线程同时执行Python字节码。

但事后看来,吉尔并不理想,因为它阻止了多线程的CPython的程序充分利用多核处理器的性能。但由于吉尔长期存在,许多官方和非官方Python包和模块都深度融合了吉尔模块,移除吉尔功能的工作变得任重而道远。此前,开发者拉里·黑斯廷斯在其 " Gilectomy”(吉尔切除手术)项目中试图完成CPython的吉尔功能的移除,但该项目失败了,因为它使单线程Python代码显着变慢。 而此次Python语言峰会带来了另外一个项目<强> <强>”nogil” <强>、该项目由元开发人员山姆主总持,从项目名称不难看的出,这也是一个专注于移除吉尔的项目。参考了Gilectomy项目的失败经验,山姆总值意识到:如果要使Python在没有吉尔的情况下有效工作,则需要添加新的锁,以确保它仍然是线程安全的。然而,向现有代码添加新锁可能非常困难,因为新的锁可能会导致在部分领域的性能大幅下降。 据Python基金会的介绍,总值将发明一种新型锁,一种“更吉利”的锁。如果顺利的话,这个新锁很可能在Python 3.12版本亮相,因为总值的提案就”是在Python 3.12中引入一个新的编译器标志,该标志将禁用吉尔。”

Python 新提案:删除全局解释器锁 GIL,解放多线程性能

0 留言

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码