注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

暇隙读书(10)——设计优化读《提高C++性能的编程技术》  

2015-04-22 21:52:05|  分类: UML+设计模式 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

暇隙读书(10)——设计优化读《提高C++性能的编程技术》

好久没有轻松的读书了,特别是从前年开始的项目一直催着进度。不过终究还是抽时间来看一看一直想看《提高C++性能的编程技术》,这本书以前看过几章电子书,后来忙起来就忘记了,再后来买了这本书,又被同事借走,所以一直也没有认真从头读。

这几天晚上抽了一小段时间看,发现十四章的设计优化有些意思,其实有相当一部分知识在实践已经在运用但没有人家总结的好。还有一些确实没有人家能力高。

他分了七个方面进行了说明。

第一点讲设计的灵活性和性能。比如针对C++标准库,它提出了一个加法的算法,并举了一个字符串相加的例子来证明提高性能就牺牲了一定的通用性。也就是说,性能和灵活性上是无法做到二者得兼的。

第二点讲缓存,包括其后的章节都讲过,基于二八原理,缓存的重要性是不言而喻的。但是缓存用不好,会引起数据缓存的抖动,反而会降低性能。(165节)另外还有一个就是大数据量计算时,需要把一些仅有的数据提前算出保存或者保存到指定快存中,最后,对于大量的基于大概率的判断语句要使用一定的方法(文中使用的多态,在LINUX中有一些偏向宏,可以对大概率访问的分支跳转unlikely,likely)。

第三点是对于一个软件来说,高效的算法和数据结构是必须的,但这不是全部,甚至不是最重要。

第四点就是要延迟计算,在C#Java的框架中都有类似的延迟加载(延迟执行,延迟调用),就是为了防止计算出来后发现实际并没有或者很少使用这个计算。举一个简单的例子,在判断语句中有一条要使用到计算,但实际的执行情况是每天甚至每周才可能调用一次,但是调用一次可能会耗费不小的时间值。所以,类似的这种东西还是等真正用时再计算。

第五,举一个getpeername的例子来说明这种东西也是非常耗费时间的。这个跟第四点基本类似。他举了一个Accept的例子,把这个功能附加到Accept上来,顺带解决这种问题。

第六是无用计算,与上面类似。

第七是失效代码,这个是比较现实的,因为一般公司中都会或多或少的有一些传承或者一些库,举一个最简单的例子,公司一般都有多套的协议解析,会在判断语句中处理,有一些实际是基本是不用的,再弄一个极端的。比如有两种协议, 前者是为了最早的设备而用,而实际早已经废弃,但还是有一个if来判断着,这就会在CPU流水上引入无用的泡沫,耗费了宝贵的CPU的时间。

以上的一些方法如果拿出来一些小工程小例子来晒,估计会被痛扁一痛,可是放到大型的工程里或者复杂的算法里,可能就很多人不敢说什么了。其实,如果有心看一看一些代码,其中有相当的失效和僵死的代码。

所以说,简单是美,但做简单的过程,真不美。

  评论这张
 
阅读(261)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017