现在的位置: 首页 > 综合 > 正文

优化一般思路/模式(二)

2013年08月25日 ⁄ 综合 ⁄ 共 1098字 ⁄ 字号 评论关闭
文章目录

4、扁平化

扁平化一般指两个方面,一是减少函数/类的数量,降低函数/类之间的调用层次.二是写更接近硬件的代码.
对于第一点,一个比较简单的例子就是C/C++中的inline关键字,将小的函数直接展开.函数调用是有开销的,完成同一个功能,调用的函数越多,用在非业务处理上的CPU时间也越多.类之间的调用如果涉及到继承和多态,还会有虚表等一些额外开销.此外,当前提倡的N层体系结构,在逻辑和架构上说它很优美,很灵活并很具有伸缩性,但层与层之间的通讯和业务数据在层与层之间复制造成代码运行速度在一定程度上降低.对于这一点,架构师要注意做好权衡,在性能达不到要求的时候,对分层的部分进行合并,使代码扁平化以提高效率.
第二点,写更加接近硬件的代码,这是显而易见的.其实所有程序都会编译成硬件认识的语言,只是这个编译过程却不如我们想象的那么完美.越高层次的语言,其编译器所需要做的考虑越多,也越加不容易达到理想的翻译效果.虽然编译技术一直在高速发展,但是在目前的状况下,对于一些性能要求极其严苛的情况,我们还是可以考虑用更接近硬件的方式编程.比如说用C语言写核心算法,更加极端的情况就使用汇编.当然这会很严重的影响可移植性.
代码扁平化如上所说,是以牺牲某种程度的灵活性,可移植性和伸缩性为代价的.也正是因为它紧密耦合,更加接近硬件,因此它的速度更快.

5、串行化与并行化

当半导体工艺不可能无限制提高,CPU耗电量和发热量不可忽视,提高时钟频率不再能显著提高性能时,多核技术出现了.多核技术的本质也就是并行化,将一个人(核)拼命都做不完的事情,分给多个人(核)做.小学时候就学过的统筹规划在这里就派上了用场,我们可以一边烧开水,一边洗衣服.在切菜的同时热油.其实并行也不光是为了提高性能,它还有一个作用是降低响应时间.比如说如果医院挂号处只有一个人,很多人去挂号的话很可能要排长队,如果变成多个人,那可能就不用等了.并行的主要好处一个在于灵活和可伸缩性,如果觉得双核不够,可以再加俩核,另一个好处是它还有一定程度的容错性,多个CPU挂掉一个,其它CPU照常工作.当然,它也有限制,那就是并不是每个任务都能很好的分解成能并行执行的子任务,而且对于一般任务,也没有一个固定的模式将其分解.而且无论是并行程序设计还是并行硬件的设计都充满着不可控制的因素,设计难度非常的大.因此并行到了一定程度,很多东西又变回了串行.比如说硬盘接口就是一个例子.
一般来说,串行的程序是执行效率最高的,因为它不需要和别人共享数据,不需要在等待资源的时候把自己挂起.对于单处理器的系统,串行的程序可以避免进程/线程切换带来的损耗,提高执行效率.

抱歉!评论已关闭.