您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

充分榨干 CPU 的每一个 TICK:软件性能优化方法知多少

时间:2020-12-09 10:37:21  来源:  作者:

前言

伴随着互联网的快速发展,数据的规模及软件的复杂程度呈指数级增长,带来的硬件资源开销、能源消耗也越来越大。为了控制硬件成本,也为了支持更大的并发量,软件性能的优化工作也越来越重要。接下来,本文将从“充分了解 CPU”、“深入理解编译器”、“对你的代码负责”三个方面详细、全面介绍下软件性能优化的原理及相关方法。文章最后给出总结:性能优化的时机、性能优化的注意事项及性能优化需要的工具有哪些。

1 充分了解 CPU

系统的 CPU 理论知识太多、太复杂,包括 CPU 架构、运算单元、记忆单元、控制单元、数据总线、指令周期、多核、超线程等等,这里只讲三个性能优化时常见的概念:cache、寄存器和多线程。

  • cache

关于 cache,你只要记住一点:CPU 在执行任务的时候,从 cache 读取数据的速度远远大于从内存读取数据的速度。而程序在执行时,会有数据 cache miss 和指令 cache miss。cache 的容量决定了有多少代码和数据可以放到 cache里面,我们优化程序的目标是把程序(代码段)尽可能放到 cache 里面,读取数据时,尽可能做到 cache 里的数据都是要用的。涉及的手段有:

结构体变量字节对齐

预取(prefetch):提前获取下一阶段程序执行需要的数据

函数重排:获取程序运行轨迹,重排二进制目标文件(elf 文件)里的代码段

函数冷热分区

  • 寄存器

控制函数入参个数(对有的硬件而言,当函数入参不超过 4 个时,入参是放在寄存器里的,寄存器读取速度那是相当快滴)。

  • 多线程

多线程是充分利用 CPU 多核优势,避免 I/O 时 CPU 闲置。这里一个重要的性能瓶颈点是:锁。如何定位锁的开销?这里可以大致给你个数据,一般单次加解锁 100 cycles,spinlock 或者 cas 更快点。多线程场景下,如果 CPU 利用率上不去,而系统吞吐量也上不去,那么大概率时锁导致的性能下降。

2 深入理解编译器

避免过多的函数跳转,请使用内联函数和函数宏;

编译器自带的优化项,比如 gcc -O3 等;

32 位环境里面用 64 位 counter 很显然会影响性能,所以除非必要,最好别用;

使用静态内存替代堆内存,,可以做到提前分配;

利用编译器自带的优化工具,做好分支预测。

3 对你的每一行代码负责

算法的重要性相必大家都很清楚了,每个人都能想到这一点,好的算法能带来性能数量级上提升。这里,推荐一种最简单也是最有效的手段:查表,内存足够的话,数组性能最高。

不要做额外的事情,特别是无用的事情,避免重复计算。

内存池能大量减少内存碎片。

理清多条件判断的顺序,尽量在最外层条件判断时就能有结果。

除了上述三点之外,还有 I/O 优化、网络通信时间优化、硬件加速(使用专有硬件,将部分软件功能下沉到硬件)、优化代码流程等方法。

总结:

  • 性能优化的时机

当你遇到性能瓶颈时,你就不得不做性能优化了。在一些软件竞赛时,特别明显,除了比拼算法(软件大赛题目一般都是 NP-hard 问题,主要看谁的程序模拟的轮次更多、更有效),剩下的就是要如何榨干 CPU 的每一个 TICK。

  • 性能优化的工具

善用 perf(linux 自带的工具,采集程序运行时的线程、函数等开销)及生成火焰图(图形显示函数调用栈及 CPU 占用率)。具体的使用方法,各位同学自行学习哈,还有 top -H、ps -aux 等常用命令。

  • 性能优化的注意事项

性能优化时,不能破坏原有的程序功能,更不能引入新的 bug。

要平衡好程序性能和代码美观度及可读性之间的关系。

性能优化要按照软件重构的步骤:

一个时刻只戴一顶帽子;可观察行为保持;小步前进

最后,引用大神 Kent Beck 的一句话作为文章的结尾:“你可能不会成为一个伟大的程序员,但是你可以成为一个具有伟大习惯的好程序员。”

充分榨干 CPU 的每一个 TICK:软件性能优化方法知多少

 



Tags:软件   点击:()  评论:()
声明:本站部分内容来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
前言伴随着互联网的快速发展,数据的规模及软件的复杂程度呈指数级增长,带来的硬件资源开销、能源消耗也越来越大。为了控制硬件成本,也为了支持更大的并发量,软件性能的优化工作...【详细内容】
2020-12-09   软件  点击:(0)  评论:(0)  加入收藏
曾经有人说.NET是最容易被反编译的开发语言。其实现如今,在常见的开发语言中,无论是.NET还是Java,甚至人气排名第一的JavaScript都存在容易被反编译的风险,如何保护代码不受窃取...【详细内容】
2020-12-08   软件  点击:(4)  评论:(0)  加入收藏
应用程序或网站的功能测试是SDLC(软件开发生命周期)的最重要阶段之一。开发人员、测试人员、项目经理、运营人员,甚至管理人员都需要多多少少参与到整个项目的功能测试。测试工...【详细内容】
2020-12-07   软件  点击:(4)  评论:(0)  加入收藏
一直以来,区块链走在科技的前沿,自然吸引了很多科技界的大佬关注。其中,以McAfee杀毒软件闻名的迈克菲无疑是最为特立独行的一个。本期币诚时代“链识大咖”将带大家走进杀毒软...【详细内容】
2020-12-07   软件  点击:(3)  评论:(0)  加入收藏
1、通过在文件对话框中选择身份文件来添加/更改身份文件2、通过图形帮助添加/编辑端口转发选项3、在帮助下添加/编辑任何受支持的ssh选项4、RSA密钥对生成5、用于将主机配置...【详细内容】
2020-12-04   软件  点击:(4)  评论:(0)  加入收藏
用电脑这么多年,我遇到最多的问题就是: “我的电脑很卡,开机 10 分钟,还有无限的弹窗和小广告!” 其实一点也不意外,毕竟像我这种安装软件小心翼翼的电脑玩家,都躲不过,何况是小白们...【详细内容】
2020-12-03   软件  点击:(4)  评论:(0)  加入收藏
大家好,我是柯子。今天开始,我又将继续为大家推荐各种关于安卓、电脑、智能电视上的好玩又使用的软件工具。希望我的推荐能够给大家的智能生活带来别样的方便和乐趣!今天给大家...【详细内容】
2020-11-27   软件  点击:(6)  评论:(0)  加入收藏
苹果电脑,其实真的不仅仅只是颜值高,它的生产力一旦在你真正掌握了它的精髓之后,会无与伦比。除了性能和系统的强大,还包括我经常分享的一些隐藏技巧,实际上更重要的还有一个原...【详细内容】
2020-11-26   软件  点击:(9)  评论:(0)  加入收藏
随着 macOS Big Sur 的发布推送,越来越多的应用完成了新系统新特性的适配更新。就在最近,macOS 平台专业的图像编辑软件 Pixelmator Pro,迎来了 2.0 版本的大更新。新版本完成...【详细内容】
2020-11-26   软件  点击:(6)  评论:(0)  加入收藏
推荐这五本书。1、代码整洁之道 本书提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,本书作...【详细内容】
2020-11-26   软件  点击:(4)  评论:(0)  加入收藏
前几期的免费软件推荐得到大家的一致好评,另外有些小伙伴想要一些软件推荐,这一期为大家推荐一下。希望大家多多支持。话不多说,进入正题,走起~~一、PotPlayerPotPlayer,是KMPlay...【详细内容】
2020-11-25   软件  点击:(6)  评论:(0)  加入收藏
今天给大家出个外网访问内网畅捷通软件的教程。相信大家都知道,在没有公网ip的情况下,我们是没办法在外网访问内网的应用的;这时候应该怎么办?我们今天就用闪库内网穿透来解决这...【详细内容】
2020-11-23   软件  点击:(6)  评论:(0)  加入收藏
小伙伴们,你们在Linux系统安装软件,是怎么解决依赖问题的呢,今天安装suitecrm,一起来看一看吧!suitecrm是一个php开发的客户管理软件,在安装suitecrm前,需要配置php开发环境,安装时...【详细内容】
2020-11-23   软件  点击:(4)  评论:(0)  加入收藏
今天谈下架构设计中的分层思维和分层模型以及基于分层思维下的架构构图逻辑。架构思维概述对于架构思维本身仍然是类似系统思维,结构化思维,编程思维等诸多思维模式的一个合...【详细内容】
2020-11-23   软件  点击:(5)  评论:(0)  加入收藏
解耦的对立面是耦合,耦合是指阻碍变化的依赖;解耦是要在依赖的基础上,做到应对可能的变化。架构的定义架构是软件方法学的范畴,它解决的是软件组织的问题,不解决软件算法的问题。...【详细内容】
2020-11-23   软件  点击:(3)  评论:(0)  加入收藏
在生活中我们都会遇见电脑烦不胜烦的推荐广告。再好的应用也在广告植入,说到底都是为了推广。那么我们如何去除广告。下面告诉大家一个生活中的妙招。 点击右上角的菜单栏, 再...【详细内容】
2020-11-18   软件  点击:(8)  评论:(0)  加入收藏
在Windows 10上,可以启用远程桌面以允许使用远程桌面协议(RDP)远程访问电脑。通常,你可以使用此功能来提供帮助或控制计算机或服务器,而无需使用现代的“远程桌面”或旧版的“远...【详细内容】
2020-11-13   软件  点击:(10)  评论:(0)  加入收藏
一、现象描述如何绕过win7系统开机密码,进入系统安装特殊软件。客户需要在公司人员电脑里面,安装一款特殊软件,但是公司人员电脑系统已经设置了密码,而且电脑使用的登录账号是ad...【详细内容】
2020-11-13   软件  点击:(7)  评论:(0)  加入收藏
程序员除了要写代码之外还经常需要画一些图,这其中包括流程图、软件架构图和一些说明文档的插图等等。目前大家用得比较多的可能是微软的Visio、IBM的Rose或者亿图等软件。这...【详细内容】
2020-11-13   软件  点击:(5)  评论:(0)  加入收藏
Forrester对2021年的软件开发做了5个预测。Bill Detwiler与软件行业资深副总裁兼首席分析师Jeffrey Hammond(该报告的主要作者)讨论了开发者和IT领导者在2021年应该做些什么...【详细内容】
2020-11-11   软件  点击:(3)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条