今天小编分享的科学经验:Python团队官宣下线GIL:可选择性关闭,欢迎阅读。
鹅妹子嘤!拖累 AI 和 ML 运算的 GIL 锁终于关!闭!了!
Python 官方宣布,在新版的 CPython 中,GIL 锁将成为「可选择项」。
人们终于不必再受到这一限制的困扰了。
这则通告中提到的 colesbury,多年来一直致力于让 Python 官方把 GIL 移除。
现在这个梦想终于实现了,不仅 Python 官方对他表示了感谢,网友也给他发去了贺电。
GIL 的关闭,意味着此前只能串行的多个线程将可以并行运行。
对于人工智能、机器学习等计算密集型领網域,工作效率将大大提高。
听闻这一消息,已经用了 20 年、快要把 Python 当成母语的老用户流下了激动的泪水。
LeCun 也发文表示庆祝:再也没有 GIL 了!
再见了,GIL
根据官方通告显示,GIL 的下线工作将分为三个阶段。
短期之内,出于兼容性等考量,「无 GIL」将作为实验性功能供用户选择。
在这一阶段(大约是 3.13 版本),Python 团队也需要进行摸索,可能无法提供社区支持。
同时官方也希望发行商在这一阶段不要将 no-GIL 作为默认属性。
这一过程可能持续 1-2 年时间。
当有足够的社区支持能力后,GIL 的退出将进入中期阶段。
这主要取决于修改后的 API 对旧版本的兼容程度。
这一阶段当中,分销商将开始提供 no-GIL 版本,但不同的包之间可能存在较大差异
而 Python 团队的长期目标是将 no-GIL 作为默认选项,甚至彻底抹去 GIL 的一切痕迹。
官方对此十分期待,但同时为了确保兼容性,也表示不能操之过急。
官方预计,这一目标可能要等到五年之后实现。
同时官方也表示,如果在此期间发现关闭 GIL 的风险远大于收益,会进行回滚操作。
不过,也有吃瓜群众表示,GIL 是个嘛玩意儿?
而且这条的浏览量在评论区还排上了第二名。
那就让我们来看看,这把「锁」,究竟「锁」住了什么。
GIL「锁」住了什么
GIL 全名为全局解释器锁(Global Interpreter Lock)。这是一种线程管理机制,并不根属于 Python 语言,而是存在于 CPython 中。
Cpython 是由官方推出、用 C 语言实现的 Python 代码解释器。
换言之,只要用的 Python 是官方版本,都会受到 GIL 的影响。
在 GIL 锁开启的情况下,同个进程内的多个线程只能串行而不能并行。
GIL 的释放有两种触发方式,一种是遇到 I/O 操作,另一种则是超出时间限制。
遇到 I/O 操作时,原线程运行结束,其余线程对 CPU 使用权进行「竞争」。
但如果是超时释放,原来运行的线程会重新加入这场「竞争」。
这种做法是出于安全性考虑,但已经不能适应时代的发展。
根据 GIL 的原理,主要进行 I/O 操作的程式,比如网页爬虫,受到的影响并不大。
而对于计算密集型的程式来说,就是另一回事了。
GIL 诞生时的 CPU 还只有一个核心,但在发展的过程中,GIL 始终保持着全局锁定的特性。
这就导致了在多核 CPU 早已普及的今天,多出的核心并没有被利用,大量算力被浪费。
这意味着,对于 AI、ML 等计算密集领網域,效率会出现严重降低。
AI 发展如火如荼的现在,姗姗来迟的解决方案终于出炉。
不过,就像这位网友所说的,晚一些总比没有好。
参考链接:
[ 1 ] https://discuss.python.org/t/a-steering-council-notice-about-pep-703-making-the-global-interpreter-lock-optional-in-cpython/30474
[ 2 ] https://twitter.com/soumithchintala/status/1685524194144989184
[ 3 ] https://en.wikipedia.org/wiki/Global_interpreter_lock
[ 4 ] https://wiki.python.org/moin/GlobalInterpreterLock