




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
化与Profiling首先,提到高性能编码,你肯定听现代计算机科学的鼻祖高德纳(DonaldKnuth)的Weshouldforgetaboutsmallefficiencies,sayabout97%ofthetime:prematureoptimizationistherootofallevil.Yetweshouldnotpassupouropportunitiesinthatcritical3%.我们应该忘掉那些效率低下的事情,告诫自己在97%源。但是,我们也不应该在关键的3%——ComputerProgrammingasanArt(1974)不过,可能很多程序员都只记住了这句话的前半部分,“97%的情况下,过早优化是万恶之源”,而没有注意到这句话还有后半句:我们不应该放弃掉那关键的3%的优化机所以这样造成的就是:过度推崇不要对代码进行提前优化,并以此来作为编写性能C++所以高性能实现的第二个原因代1代1publicclass789Channel[]publicChannels()channels=new}publicreceiveData(...){....}//收到数据更新ChannelpublicbooleanhasData //for(ChannelChannel:{if(Channel.dataSize>0){returntrue;}}return}}2{class3publicString4publicint5}6那么在看完代码之后,你觉得这段代码实现中的方法hasDat如果你只是根据这段代码实现来进行分析,会发现它好像没有啥性能问题。毕竟,针对一0个元素的数组来说,使用二分法查找来提升查找速度的必要性不太大。其实,就我的思考和实践经验来说,在开发一个高性能软件系统的时候,在编码阶段考虑高性能的实现方法,与完成业务功能后再进行代码调优之间并不,这二者应该被同等地重视起来。因为前期的高性能编码实现过程,很多都是由人来控制的,所以可能会由于判断确或者实现过程不,引入一些低效率的代码实现。这样一来,期通过热点代码分析以及代码调优的过程,就是不能省略的。所以,今天我主要是从编写的代码映射到执行过程的角度和,分别是循环实现、函数方法实现、表达式实以及中,实现的功能是循环遍历并更新字符串中的值,你会发现在循环执行的过程中,被调用了很多次,所以性能比较低。代代voidupdateStr(char*{for(inti=0;i<strlen(str);{ str[i]= 7代代voidupdateStr(char*{intlength=for(inti=0;i<length;{ str[i]= 8我们同样也来看一个反模式的代码示例。在下面这段代码的实现过程中,xy生变化,但是在循环体中被执行了很多遍。代代1voidinitData(int[]data,intlength,intx,int223456for(inti=0;i<length;{data[i]=x*y+}}因此,站在高性能编码实现的角度,我们可以把*y其实到这里,你可以记住一句话:其实不同的编程语言,支撑函数方法内联的语法和机制有一定的差异。在Java语言的开发过程中,我推荐你尽量使用final来定义方法,因为这种场景下,Java的JIT会有比较大的C++InlineC的本是函针,要在过程取内变量,来判码需要跳转到哪个位置。而这种运行期动态决定跳转地址,就很容易导致指令集流水线的中断,造成指令Caches的概率增大,从而引起性能下降。不过在Java语言中,因为类方法模式都是抽象的,所以我们可以将关键方法定义成静态方法,从而避免多态调用;对于C++来说,在定义类方法的时候,我们可以根据需求来决定是否需要使用抽象方法,以此减少不必要的多态;而在C的问题,所这里我就不展开介绍了。代代1inty=x*那么,对于高性能的编译器来说(如新版的GCC9.x等),就可以将这个乘法操作优化为比如你下面的代码,这是一个包含了3个乘法运算的表达式代代1intz=32*x*432*代代12intz=x*x+y;//intz=x*(x+y);//CPU首先你要知道的是,控制流程代码在执行的过程中,CPU执行会通过指令分支预测,提前将接下来的执行指令搬移到Cache中,如果预测失败,就有可能引起指令流水线中断,从这里,我也给你一下我在实践过程中总结出来的经验,即尽量减少不必要的分支判断。x==2x==3代代123456789if(2==x){}if(3==x){}if(4==x){}//场景switch利用表驱动来减少switch逻辑和小的for循环平铺执行,等等。所以这里,我给你一个小建议,就是在一些特殊场景下(if景),你可以考虑使用switch来替换if,这样也有可能改善代码的执行性能。今天这节课,我带你一起探讨了高性能编码的价值观,其实我的观念就是,码实现需要和后期的代码热点调优一起互相配合,而不是孤立地去看待其中一个,这样才会更容易开发出高性能的软件。另外,在明确了高性能实现的价值之后,你还要清楚应该从哪些要点出发,去思考实现高性能编码,以及在高性能编码中针对一些典型业务场景的实现。你可以先理解和掌握这节课我给你的四种高性能编码实现的方法思路,然后按照这个思路,逐步积累和提升高性能编码的能力,从而帮助你最终开发出高性能的代码。每一种编程语言都在不断
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业技能培训机构教练员知识产权保护聘用合同
- 高端生物合成研究员劳动合同
- 2025年中国半导体胶膜行业市场前景预测及投资价值评估分析报告
- 港口集装箱堆场管理与运营承包协议
- 高端生物医药研究员全职聘用与研发成果转化优先权合同
- 知乎盐选专栏内容版权合作与数字图书馆引进协议
- 轨道交通技术合作补充协议
- 建筑电线电缆采购及敷设质量监控服务合同
- 影视拍摄移动摇臂租赁及远程操控服务合同
- 微信小程序电商代运营及客户关系维护协议
- CJT 244-2016 游泳池水质标准
- 天津市部分区2023-2024学年八年级下学期期末练习道德与法治试卷
- 2024年年1一4季度思想汇报7篇
- 光伏发电技术项目投标书(技术标)
- 《现代库存管理:模型、算法与Python实现》 课件全套 杨超林 第1-17章 现代库存管理概述-某家电企业H的制造网络库存优化实战
- (正式版)QBT 5998-2024 宠物尿垫(裤)
- 2023年中国(教育部)留学服务中心招聘考试真题及答案
- 补习班辅导班学员合同协议书范本
- 肝性脑病小讲课
- 智慧农业的智能农机与装备
- 网络推广补充协议范本
评论
0/150
提交评论