python3.9性能提升_Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型-阿里云开发者社区...
Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型
Python 的 3.9.0 版本正在开发中,计划在 2020-10-05 发布 final 版本。
官方在 changelog 中披露了很多细节,其中有一项“vectorcall”特性是最容易被接受的,本文打算带大家先来一探究竟。
事实上,早在 Python 3.8 版本中就已部分地实现了 vectorcall,只不过它是暂时性的,被隐藏起来了,按计划是在 3.9 版本中实现完全体。下图是 3.8 版本中的简介:
那么,什么是 vectorcall 呢?它会带来哪些变化呢?
“a fast calling protocol for CPython”,即它是 CPython 的一种快速调用协议,可以加速 CPython 解释器在调用类对象时的速度。
(PS:需要注意的是,这里说的“协议”是一种广义的称呼,它跟我们熟知的网络协议或通信协议不同,可理解为对代码作调用时的一种约定、一种实现方式)
这种协议是在 PEP-590 中被提出的(时间是 2019-03-29),对应的 bpo 是 issue37207,历时近一年的开发,目前它的实现已合入了代码仓。
用一句话概括它的核心要点是:它将提升 list()、tuple()、dict() 等主要类型的调用速度,同时它还可以被用在自定义的类上。
结合 PEP 与 bpo 信息,我提炼了以下的详细要点:
vectorcall 是对 fastcall 的正式化。在之前的 CPython 中存在一些零散的优化点(即 fastcall),如今官方把它们系统化了,给出了一个正式的“vectorcall”称呼
vectorcall 适用于多数内置类型。据当前的披露信息,它适用于 list、tuple、dict、set、frozenset 与 range 这 6 种主要的内置类型(部分测量数据显示,速度提升率达 10%~30%)
vectorcall 是对性能与灵活性的调和。之前的解释器具有很高的灵活性,但是在对象调用过程中,存在不必要的中间对象以及间接的调用开销,如今是设法消除了这部分开销,得以提升了性能
PEP-590 中还详细介绍了 CPython 的实现细节,并罗列了 C API 的变化点,这部分内容就不展开了,感兴趣的同学请自行查阅文档。
--------猫哥碎碎念分割线--------
主要的内容就算介绍完了,它很简单,并不难理解,不会带来学习的负担,也不会造成什么意见分歧。
但是说句老实话,这个性能提升可能显得有点“费力不讨好”:内置类型的调用速度并不会造成什么性能问题(并不慢),而提升空间也仅是纳秒/微秒级别,非常有限。多名核心开发者花费大半年时间和精力,到底值不值得?
我们恐怕都没有对此作出价值评判的资格。仁者见仁,智者见智。
但是,也许我们可以往乐观的方面想:对于这种微不足道的性能提升,核心开发者们都能认真对待、精益求精、持续投入、考虑全面,那在其它方面上也绝不会逊色。所以,我们有理由对 Python 的未来保持乐观的希望!
python3.9性能提升_Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型-阿里云开发者社区...相关推荐
- python 3.9 性能_Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型
原标题:Python 3.9 性能优化:更快的 list().dict() 和 range() 等内置类型 Python 的 3.9.0 版本正在开发中,计划在 2020-10-05发布final版本 ...
- python3.9性能_Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型
Python 的 3.9.0 版本正在开发中,计划在 2020-10-05 发布 final 版本. 官方在 changelog 中披露了很多细节,其中有一项"vectorcall" ...
- python后台开发性能问题_《Python高性能编程》——2.14 确保性能分析成功的策略-阿里云开发者社区...
本节书摘来自异步社区<Python高性能编程>一书中的第2章,第2.14节,作者[美] 戈雷利克 (Micha Gorelick),胡世杰,徐旭彬 译,更多章节内容可以访问云栖社区&quo ...
- mysql批量插入跟更新_Mysql批量插入和更新的性能-问答-阿里云开发者社区-阿里云...
利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...
- android屏幕适配无效_Android APP全方位性能调优之屏幕适配终结者-阿里云开发者社区...
优点 1. 无侵入性 首先科普下 Android 中的一个长度单位:pt,它表示一个点,是屏幕的物理尺寸,其大小为 1 英寸的 1 / 72,也就是 72pt 等于 1 英寸(其实 Android 中 ...
- mysql官方读写性能_mysql读写性能测试-阿里云开发者社区
概述和测试环境 压测的目的是为了尽量模拟真实情况.测试的表都是由10个int型字段和10个字符串型字段组成.每个测试项目都测试了myisam和innodb两个引擎.测试的方法都是用两个线程并发,一共跑 ...
- python调用 matlab库_python调用matlab的搜索结果-阿里云开发者社区
2018python技术问答集锦,希望能给喜欢python的同学一些帮助 小编发现问答专区中有很多人在问关于python的问题,小编把这些问题汇总一下,希望能给喜欢python的大家一些启示和帮助 本 ...
- python 黑客工具开发_python黑客软件的搜索结果-阿里云开发者社区
带你读<Python科学计算(原书第2版)>之一:导论 计算机科学丛书点击查看第二章点击查看第三章Python科学计算(原书第2版)Python for Scientists, Secon ...
- python读取mssql文件_python 读取mssql数据库中文的搜索结果-阿里云开发者社区
sphinx 配置文件全解析 sphinx的配置文件是在配置的时候最容易出错的了: 我们先要明白几个概念: source:数据源,数据是从什么地方来的. index:索引,当有数据源之后,从数据源处构 ...
- python 做网站 知乎_python做网站 知乎的搜索结果-阿里云开发者社区
伤不起的全栈程序员 前段时间听说一个新名词:"全栈程序员",google了一下,被引导到了知乎的一个讨论上: http://www.zhihu.com/question/22420 ...
最新文章
- Windows Phone实用开发技巧(32):照片角度处理
- windows xp开机音乐7秒_(老旧电脑的福音)win 10 ltsb2015开机只要7秒
- 网络安全-XSS笔记
- NTU课程笔记 mas714复习:例题
- tensorboard 使用教程
- .Net Core with 微服务 - Seq 日志聚合
- 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现
- 轮廓的查找、表达、绘制、特性及匹配(How to Use Contour? Find, Component, Construct, Features Match)
- 环境变量bootcmd、bootargs的参数含义
- uniapp怎么解析html字符串,uniapp富文本解析插件的详细使用教程
- 详述一则DB2 Error Code 1639和SQL State 08001案例诊断和解决方案
- 【iOS】Swift3中NSFetchRequest报错:Generic parameter 'ResultType' could not be inferred
- UEFI win7系统的安装
- 数据库pgAdminIII导入sql文件
- call stack详解
- Java爬虫(三)后台发请求获取页面解析数据
- 向量叉积分配律简单证明
- 强劲大小核结构 三星将推八核处理器
- iOS 获取 WKWebView 里面图片
- 后端生成PDF一些工具