当前位置: 首页 > 科技观察

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

时间:2023-03-20 00:20:13 科技观察

根据Python基金会博客,开发者SamGross在2022年Python语言峰会上带来了新提案:彻底去除CPython解释器的GIL-全局解释器锁可提高Python程序的性能——尤其是多线程程序。Python有多个版本,包括JVM、.NETCLR解释器和编译器,但该语言的核心实现仍然是CPython解释器。由于CPython的内存管理不是线程安全的,因此CPython的GIL(GlobalInterpreterLock——全局解释器锁)旨在防止竞争条件并确保线程安全。GIL是一种互斥锁,只允许一个线程控制Python解释器,从而保护对Python对象的访问并防止多个线程同时执行Python字节码。但事后看来,GIL并不理想,因为它阻止了多线程CPython程序充分利用多核处理器的性能。但是由于GIL的长期存在,许多官方和非官方的Python包和模块都深度集成了GIL模块,去除GIL功能的工作变得任重而道远。此前,开发者LarryHastings试图在他的“Gilectomy”(GIL移除手术)项目中完成移除CPython的GIL功能,但该项目失败了,因为它使单线程Python代码显着变慢。Python语言峰会带来了另一个项目“nogil”,由Meta开发者SamGross主持。从项目名称不难看出,这也是一个专注于去除GIL的项目。参考Gilectomy项目的失败经验,SamGross意识到:如果你想让Python在没有GIL的情况下有效工作,你需要添加新的锁来保证它仍然是线程安全的。然而,向现有代码添加新锁可能非常困难,因为新锁会导致某些区域的性能显着下降。据Python基金会称,格罗斯将发明一种新型锁,“吉祥”锁。如果一切顺利,这个新锁很可能会在Python3.12版本中首次亮相,因为Gross的提议是“在Python3.12中引入一个新的编译器标志,它将禁用GIL。》本文转自OSCHINA本文标题:Python新提案:删除全局解释器锁GIL解放多线程性能本文地址:https://www.oschina.net/news/196247/remove-gil-from-cpython