




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
化与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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 采购合同法律合规性审查重点基础知识点
- 安全漏洞修复合规性培训费用重点基础知识点
- 入职培训总结
- 鼻骨骨折术后护理查房
- 员工劳动合同格式范例二零二五年
- 365昆山租房合同范本
- 健身房教练雇佣合同二零二五年
- 肥料销售合作合同范本
- 餐饮员工礼仪培训
- 骨转移骨折的防护与护理
- 河北省石家庄市元氏县德才中学-梦想励志主题班会-雷军的爽文人生【课件】
- 2025年郑州轨道工程职业学院单招职业适应性测试题库必考题
- 中和人民共和国民法典全册
- 2025春季眉山市国有资本投资运营集团有限公司集中招聘50人笔试参考题库附带答案详解
- 2024年陕西师范大学辅导员与心理健康教育教师招聘考试真题
- 2025年浙江省温州市中考一模数学模拟试题(含答案)
- 国有企业问责管理制度及实施细则草稿
- 《卵石动物造型》名师课件
- 腰椎结核专科知识
- 教育政策的国际比较研究-深度研究
- 生活垃圾焚烧处理厂垃圾焚烧炉设计方案
评论
0/150
提交评论