看一名 KDE 开发者如何使用 C++17 为项目提升巨大速度
开发四年只会写业务代码,分布式高并发都不会还做程序员?
参与 KDE 和 openSUSE 开发的开源项目开发者 Antonio Larrosa 一直在独立开发着一个名为 Bard 的命令行音乐管理器。他还写了一篇有趣的帖子来讲述他如何将这个软件中一些操作的速度提升了大约八千倍。
特别是,Antonio 专注于加速在用户的本地音乐收藏中寻找歌曲/音乐副本的过程。最初的代码通过 Python 实现,后来变成了经过优化的 C++ 代码。令人惊讶的是,优化调整过的 C++ 代码要比 Python 快得多 —— 如果你希望了解作者为实现这个结果所做出的调整,以及所采取的各种步骤带来的影响,不妨看看作者所写的博客。
他没有用 C++ 重写整个程序,而是使用了 Boost.Python 库,该库使得 C++ 和 Python 代码之间可进行无缝的操作。从这时开始,Antonio 开始编写相关的 C++ 代码。特别是,他专注于 C++ 17 并使用了线程。进一步提升性能的操作是调整 C++ 的编译器标记(compiler flags),并将 GCC 从 7.3 版本切换到 8.1 版本。
长话短说,“作者的最后一次代码提交也最后一次提升了速度,达到 7998 倍 —— 36680首/秒(对比速度),并可在13秒内完全处理完一个1000首歌曲的音乐集。”有关更详细具体的技术细节请查看作者原博客,也可以访问他的 Bard 音乐管理器项目以了解更多。
最后作者也就这次优化总结了一些心得:
花一些时间思考如何优化代码 —— 这件事十分值得开发者去做
如果你使用 C++ 并能够使用现代编译器,那么请使用 C++ 17,它可以让你更有效地编写更好/更优雅的代码。Lambdas、结构化绑定、constexpr 等特性真的值得花时间阅读它们
允许编译器为你做的事情。,它可以对你的代码进行优化而无需你的任何努力
尽可能少地复制/移动数据。这个操作很慢,很多时候只需要在开发之前考虑一下数据结构就可以避免这个操作
尽可能使用线程
最后,可能也是最重要的:量化一切指标。你不能改进你无法量化的东西(嗯,技术上你可以,但你肯定不知道)
参考 https://www.phoronix.com/
看一名 KDE 开发者如何使用 C++17 为项目提升巨大速度相关推荐
- 阿里云开发者大会核心看点揭晓,开发者最好的时代来了?
**简介:**阿里云开发者大会七大看点 阿里云开发者大会即将拉开帷幕. 据说这次大会上有很多神秘的"声音",将重塑整个云时代? 我们也不卖关子了,这就带大家提前了解本次大会主论坛的 ...
- 程序媛报告:调查了 12,000 名女性开发者发现,女性比男性更懂 Java!
华为的中国芯将何庭波这位神秘低调的程序媛推入公众视野.在华为地位堪比任正非的她在谈及"工程师"这一身份时表示,"我觉得工程师本身就是一个很不了的职业,这也是我一生的荣耀和 ...
- 调查 10,500 名 Java 开发者发现,收费的 OracleJDK 仍是主流、IntelliJ IDEA 最受欢迎...
昨日,作为"第一家"公开宣布将裁员 15% 的滴滴,一时之间被大众推向了舆论的风口浪尖,但与此同时,因为其不变相且透明的裁员举措也为自己赢得了一片叫好声.然不可否认的是,从此事件乃 ...
- Bob,我要怎样才能成为一名 iOS 开发者
本文讲的是Bob,我要怎样才能成为一名 iOS 开发者, iOS 开发虽不易,但别怕尽管上就是了. 然而这并不是我的桌面 自我驱动 我经常收到类似的邮件跟私信, "Bob,我怎样才能成为一个 ...
- 17张思维导图,2021年作为一名前端开发者需要掌握这些,前端面试复习资料参考大纲
本文首发于17张思维导图,2021年作为一名前端开发者需要掌握这些,前端面试复习资料参考大纲,转载请联系作者 前言 2020年最后一个月了,熬夜多天整理出17张思维导图,对前端面试复习知识点进行了最全 ...
- 你想成为一名核心开发者吗?
-图片源自上次 Ewasm 团队冲刺写码.其中核心开发者只能用 6 号字体写代码.- 虽然核心开发者的准确定义尚存异议,但这个术语一般是指为区块链底层技术(比如底层协议本身或底层密码学技术. P2P ...
- 从辍学到名企资深开发工程师,一名 Android 开发者逆袭血泪史
原文:I'm an Android developer 作者:Michell Bak 翻译:ASCE1885 审校:苏宓,关注移动开发领域,寻求报道或投稿请发邮件tumin@csdn.net. 我今年 ...
- 【燃】是时候展现真正的实力了!一文看懂2022华为开发者大赛技术亮点
摘要:2022华为开发者大赛备赛攻略,超详细的开发技术要点介绍来了. 本文分享自华为云社区<[燃]是时候展现真正的实力了!一文看懂2022华为开发者大赛技术亮点>,作者:华为云社区精选 . ...
- 作为一名后端开发者,你需要学习和掌握的技术栈都有哪些呢?
开发一个普通管理系统,会用到SprinBoot+MyBatis+Spring+Mysql+Redis+RabbitMq+Nginx+Vue+Shiro+html+等等,这些技术合起来就可以称为技术栈. ...
最新文章
- TensorFlow可以做什么?让Google Brain首席工程师告诉你
- ECMAScript基础(三)-关键字
- ubuntu server 下使用subversion的总结【原创】
- 虚拟机中的linux系统无法获得ip(ifconfig命令无法查到ip)
- 编写一个函数,能够接受至少两个参数,返回最大最小值。
- vue-socket.io 对IE浏览器(IE10+)的兼容性修复
- 免费下载思维导图模板的方法
- 计算机研究生开题报告ppt模板,硕士开题报告ppt模板
- 天池大数据竞赛-河北高校邀请赛——二手车交易价格预测-初赛第22名
- linux 系统下的压力测试工具LTP和stress区别
- ElasticSearch三种分页方式以及各优缺点(一文知道如何抉择)
- Python基础=== Tkinter Grid布局管理器详解
- 解决the database principal owns a schema in the database and cannot be dropped问题
- 深圳南山区的篮球场大全
- 圭尔夫大学计算机科学硕士,加拿大硕士生物医学专业介绍:圭尔夫大学
- 使用LINUX云服务器搭建web、小程序服务器MySql+Java+Tomcat
- SQL考试练习题及全部答案2
- 拿下人脸识别“世界杯”冠军!松下-NUS 和美国东北大学实战分享
- MIPI转LVDS芯片 替代东芝TC358775XBG
- 小猫爪:PMSM之FOC控制05-让电机开环转起来
热门文章
- iOS开发 - OC - PCH文件使用
- Service-policy 的出入(QOS)
- Metasploit运行环境内存不要低于2GB
- Xamarin.Forms的ActivityIndicator和ProgressBar比较
- 在多个游戏视图间切换环境准备
- Unity的NGUI插件篇——入场效果
- uc扩展中心打不开_如何享用chorme扩展
- python统计字符串个数_python字符串中字符出现次数(python获取字符串个数)
- 数据库单表数据过亿_最受欢迎的三大数据库,你用过吗?
- linux 安装gcc4.2,Linux操作系统下安装gcc4.2.*的方法