python3.9性能_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版本 ...
- clickhouse hbase性能对比_如何让 HBase 更快、更稳、更省钱
概述 Apache HBase 是 Apache Hadoop 生态体系中的大规模.可扩展.分布式的数据存储服务.同时它还是 NoSQL 数据库.它的设计初衷是为包含了数百万列的数十亿行记录提供随机的 ...
- 自主品牌语音交互性能测评,荣威RX5反应更快,博越变暖男
文:小伟哥 图:小伟哥.网络 说起语音控制,我们第一时间想到的是iphone上的SiRi,你可以通过语音打电话.发信息,还可以查询天气,有时候还可以陪你聊天.如今许多汽车品牌都把自己的语音控制系统作为 ...
- python 字典查询比列表快_Python字典vs列表,哪个更快?
我正在编写一个欧拉问题,我遇到的问题激起了我的好奇心.我有两个代码片段.一个是列表,另一个是字典. 使用清单: n=100000 num=[] suma=0 for i in range(n,1,-1 ...
- 【前端性能】常见前端性能优化
常见性能优化 前言 一.图片优化 1.雪碧图(图片精灵) 2.图片压缩 3.字体图标代替图片 4.webp图片 二.DOM优化 1.缓存DOM节点查找的结果 2.防抖和节流 3.事件代理 4.减少合并 ...
- IntelliJ IDEA 2019.3 发布,启动更快,性能更好(新特性解读)
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 原文地址:https://www.jetbrains.com/id ...
- Java 启动和停止界面_IntelliJ IDEA 2019.3 发布,启动更快,性能更好(新特性解读)...
点击上方"小哈学Java",选择"星标" 回复"资源",领取全网最火的Java核心知识总结~ 2019.3 11 月 28 IntelliJ ...
- python异步io多文件_Python 异步 IO 性能又上一层楼
最近看源码的过程中,发现了一个比较有意思的库,aiomultiprocess,我认为他确实是 Python 升级到 3.8 之后一个特性的总结库,包括静态检查和性能提升. 这个是作者提供的一个 IO ...
- MySQL 的性能(下篇)—— 性能优化方法
简介 文中内容均为阅读前辈的文章所整理而来,参考文章已在最后全指明 本文分为上下两篇: 上篇:MySQL 的 SQL 执行分析 下篇:MySQL 性能优化 下面为下篇内容,分为以下部分: 一.创建表时 ...
最新文章
- 11.Map集合之实现类HashMapHashtableTreeMapLinkedHashMapProperties浅析
- 北大港大,都将落地深圳!
- ExtJS(3)- 自定义组件(星级评分)
- 解决linux不能安装g++问题
- 0 最优化问题数学概念补充
- 追求神乎其技的程式设计之道
- 汇聚内容页关键词优化的小窍门
- 微信大改版,时隔4年再次华丽转身。
- sql2000 sp3、sql2000 sp4升级补丁下载和安装须知
- Battery_Charing_Discharing:基于MATLAB/Simulink的锂电池充、放电控制,充电控制和放电控制均采用电压电流双闭环控制
- Android 引入第三方字体库的简单使用
- html 复选按钮 全选,JS实现复选按钮控件全选和批量操作
- idea easyYapi插件导入yapi接口使用及踩坑记录
- 使用FPGA实现的图像锐化算法(USM)设计
- 洛谷 P1824 进击的奶牛 题解
- 新西兰计算机预科学费,2018年新西兰ACG预科课程介绍(含学费、开学时间)
- 美国区块链公司Espresso Systems因涉嫌知识产权盗窃被起诉
- 5大好用又免费BI软件系统
- Autodesk Helius PFA 2019 永久版
- 王道ch3-Stackp90_2.有一个列车,HS分别表示硬座软座,利用一个栈将序列调整为S在H之前
热门文章
- 深入分析Cocos2d-x 2.0中的“纹理”和精灵-沈大海cocos2d-x教程20
- 快速搭建企业级邮件系统iRedMail+Mysql+Postfix+php
- 【收藏】ASP.NET英文技术文章推荐[10/28 – 11/3]
- H3C 模拟器 pc与sw直连 开启telnet
- 最短路径(二维矩阵)
- Mongo 3.6.1版本Sharding集群配置
- Java之美[从菜鸟到高手演变]之Exception
- C++中的未定义的行为
- C#利用SharpZipLib解压或压缩文件夹实例操作
- meta几个常用的地方