百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python 新提案:“废除”全局解释器锁 GIL | CPython 解释器或会更快

off999 2024-11-25 15:51 31 浏览 0 评论

近日,开发者 Alex Waygood 在 Python 基金会博客中提到了上周刚刚举办的Python 语言峰会上关于 Python 语言的重大议题 —— “废除” Python 语言的全局解释器锁(GIL)。

“双刃剑”:CPython —— 解释器和编译器

众所周知,Python 动态语言的灵活性是把“双刃剑”。这意味着可以有不同的运行时,例如 Pyston、Cinder、MicroPython、pypypy 等,它们可能支持整个语言、特定版本或子集。但如果你使用的是 Python,那么你可能正在运行 CPython。

CPython 是用 C 语言编写的标准 Python 解释器,它同时还充当着编译器,因为它的任务是在实际的解释阶段之前以字节码的形式编译 Python 代码。

CPython 有一种称为全局解释器锁 GIL(Global Interpreter Lock)的东西,可以影响线程代码,即一次只能在解释器中运行一个线程。因此,GIL 一直被看做是该语言发展的固有限制。

之前,也一直有提案想要解决这个问题,例如将性能关键部分移到 C 或使用多个解释器。但要满足以上期望,解释器用户的受众可能会扩大。目前有几种替代方案,例如通过专用于 JVM(Java 虚拟机)和 CLR(公共语言运行时)的方案,但以上多数现有的解决方案都有相当大的缺点。

所以基于以上背景,“不带全局解释器锁的 Python” 的支持声逐渐受到关注。

多次尝试被废除:GIL 究竟该如何摆脱掉

直到此次的 Python 语言峰会上,Meta 高级工程总监 Sam Gross 在有关 “nogil”项目的主题中,提出了“废除 GIL ”的相关议题。

据悉,该提议是基于之前在 Python 中废除 GIL 的想法。Gross 最初在使用第三方代码的 Python 项目中遇到了问题,因此开始思考“如果没有 GIL”的话如何使得线程安全的进行。

前面提到过,全局解释器锁 GIL 一次只能在解释器中运行一个线程,所以当你可以保证一次只运行一个线程时,程序状态或许会更容易推理。但如果没有 GIL,引用计数、内存分配、方法解析顺序缓存和垃圾收集线程则会变得不安全。

那么,该如何摆脱 GIL 呢?

据报道,早前 Sam Gross 就专门对这一演变进行了讨论。由于 CPython 中的设计是“线程安全”,但它依赖于 GIL。想要摆脱 GIL,首先,就要对参考计数进行重大更改。

为了知道垃圾收集器是否可以释放内存中的对象,它会统计对该对象的所有引用。目前,引用计数是非原子性的,将所有引用计数操作更改为原子性操作会对性能造成巨大影响。

Sam Gross 在该提案中使用了一种称为“有偏引用计数”(biased reference counting )的技术,用于获取本地和共享引用。本地引用可以利用非原子性操作,拥有线程将本地引用和共享引用结合起来以跟踪所有权。这种方法非常适用于单线程对象,或者只被几个线程少量使用的对象。

在程序的生命周期中存在几个对象,如插入字符串、True、False 和 None,它们可以被标记为“不朽”(immortal),从而将它们的引用计数开销减少到零。通过利用引用计数字段中的最低有效位,对象被标记为“不朽”。经常访问但不能保证“不朽”的对象延迟了引用计数,这意味着唯一需要的引用计数是当引用存储在堆上时,此更改的一个副作用是无法立即回收对象,因为需要扫描堆栈以查找任何剩余的引用。

Sam Gross 用 mimalloc 替换了标准的 pymalloc 内存分配器,mimalloc 是 malloc 的一个替代品,提供了线程安全和性能。这种交换的好处是,这个分配器允许运行时在没有显式列表的情况下查找 GC 跟踪的对象。这是一个显著的性能提升,但这意味着不能只交换另一个与 malloc 兼容的分配器,而期望垃圾收集和收集具有相同的线程安全性。

Python 尚未决定是否删除 GIL

关于为何要删除 GIL 的问题,Python 基金会博客中解释称,“为了让 Python 在没有 GIL 的情况下有效地工作,必须向大多数代码中添加新锁,以确保其保持线程安全,但向现有代码中添加新锁可能非常困难,因为在某些领域可能会出现大幅放缓。”

此次,Sam Gross “删除 GIL”的新提议似乎已经受到了 Python 核心开发团队其他成员的“热情”欢迎。现在,要解决的主要问题是如何在 CPython 上实施如此巨大的变革。

据悉,CPython 的下一个版本(或为 CPython 3.11)预计将于 2022 年 10 月发布,不知道届时会不会有大更新,但报道称开发人员们尤其希望通过此更新获得更高的性能和对在 web 浏览器上下文中运行的支持的集成。

过去的一段时间里,由于 GIL 阻碍了语言的进发,开发者曾多次尝试在标准实现 CPython 中废除这种技术。此次,“删除 GIL”的新提议终于来了,尽管 Python 官方尚未就实施作出最终决定,但一切依旧值得期待。

相关推荐

在线qq空间登录入口(qq空间在线登录在线使用)
  • 在线qq空间登录入口(qq空间在线登录在线使用)
  • 在线qq空间登录入口(qq空间在线登录在线使用)
  • 在线qq空间登录入口(qq空间在线登录在线使用)
  • 在线qq空间登录入口(qq空间在线登录在线使用)
如何添加新的打印机(如何安装打印机到电脑上)

点开电脑左下角开始,点击设备和打印机,点击添加打印机,链接方式不同选择相对于的端口如:1网络打印机选择IP/TCP端口输入ip创建端口后,浏览驱动选择安装。2usb接口的,选择usb虚拟端口,然后浏览...

qq空间说说赞免费网站(qq空间说说赞网站真人)

QQ空间里点赞的视频找不到,这是因为被隐藏,或者因为网页更新了,位置不同了。QQ空间点赞的前置图标是QQ个性商城中的“个性赞”功能,具体使用方法:一、打开手机QQ,左滑出手机QQ侧边栏,点击打开“个性...

防火墙的作用是什么

防火墙作为访问控制设备,主要工作在OSI模型的三四层。防火墙主要基于IP报文进行检测,对端口进行限制。产品设计无需理解HTTP等应用层协议,所以也就决定了防火墙无法对HTTP通讯进行输入验证或者规则分...

虚拟机安装ghost xp(虚拟机安装Ubuntu)

先安装vmospro软件(文末有直装高级版)记得给足权限,这个软件相当是你物理手机里的另一款安卓手机。2、安装完软件我们需要在里面安装一个虚拟机,直接点添加虚拟机,这里有很多虚拟机可以选择,建议选7...

固态硬盘读取不出来了(固态硬盘 读不出来)

  1、您可以在开机的时候按下【F12】或者【F8】进入电脑快速引导菜单,查看是否有SSD的名称,您可以进入BIOS之后,将LaunchCSM设置为Enabled就可以;  2、如果是全新的硬盘是没...

分区合并到c盘(磁盘分区合并到c盘)

一、选择我的电脑并点击右键,选择管理菜单。二、选择储存——磁盘管理。三、以将新加卷g盘合并到c盘为例:选择G盘并单击右键呼出菜单,在菜单中选择删除卷菜单。四、点击“是”。点击c盘并单击右键。选择扩展卷...

下载万能钥匙自动连接wifi密码
  • 下载万能钥匙自动连接wifi密码
  • 下载万能钥匙自动连接wifi密码
  • 下载万能钥匙自动连接wifi密码
  • 下载万能钥匙自动连接wifi密码
免费ip转换器(ip转换器是干什么用的)

深度IP转换器软件由广州候胜科技有限公司开发的一款国内IP地址转换器软件深度IP转换器是一款动态IP和静态IP结合的IP地址修改软件,拥有全国城市节点固定IP线路5000加高速服务器IP,属于高匿名8...

笔记本键盘键位图(笔记本键盘键位图怎么看)

在笔记本的键盘左下角有个Fn键,这个键可能很多人都不知道有什么用可能也很少会用到他,就这么被忽略了。而这个Fn键就是笔记本用来开启F1到F12功能的键,有些笔记本是按住Fn键在F1到F12就能发挥他们...

如何消除手机自动出现的广告

方法一:采用关闭手机联网功能  大家都知道手机弹出广告是在手机使用联网功能下发生的,那么可以采用对手机软件联网功能的限制,从而达到屏蔽手机广告的目的,找到手机自带的“网络助手”字样的软件打开后进入到“...

免费wifi上网(怎样打开免费wifi上网)

免费wifi并非完全真实存在。免费wifi虽然在许多公共场所提供,但并非完全免费。通常情况下,提供免费wifi的场所会要求用户进行一些操作,如填写个人信息、观看广告或接受其他形式的付费。这些操作可能会...

本机ip查询地址定位查询(本机ip地址查询位置)

1.地理定位信息。具体的位置是可以通过ip地址查询得出来的。因此,对于当下电信诈骗或者一些网络虚拟的情况下,这样的查询方式是很重要的,也是很容易得出来信息的。只有这样,才能够在定位方面更加精准可靠一点...

wifi万能密码破解器(wifi万能密码破解版)

万能钥匙主要的作用是分享与被分享的关系,你所用万能钥匙一件查询和破解的都是别人分享的密码,不是万能钥匙破解的作用,真正能破解的只是那些密码简单的,比如12345678或者豹子数比如88888888和1...

win8的稳定性(win8稳定还是win10稳定)

如果是玩游戏Win7相对win7稳定一些,能兼容大部分的游戏。其它的应该各有千秋,具体上可以从如下几点了解:1、Win8相对Win7开机更快,内存管理更高效,HTML5支持更好,兼容暂时落后。2、Wi...

取消回复欢迎 发表评论: