词条 | 程序优化 |
释义 | § 概述 程序优化是指对解决同一问题的几个不同的程序,进行比较、修改、调整或重新编写程序,把一般程序变换为语句最少、占用内存量少、处理速度最快、外部设备分时使用效率最高的最优程序 § 相关条目 处理速度 关于程序优化 以前处理8M页面和3M图片的数据量,需要二十个小时左右,调试起来实在力不从心,如果在程序里面发现一个bug,初步解决后想看看在大数据集上的效果,就得等上一两天。有时候一不小心将参数设置不合理,还得重来,实在郁闷。由于这是离线处理部分,性能相对正确性和稳定性来讲不是主要问题,时间又比较紧张,就放着没管它,项目负责人也觉得可以接受,受苦的只是我们这些维护人员。经过一两个星期的折腾后,程序的正确性和稳定性都没大问题了,暂时又没有其它要紧的事情做,于是抽出手来完成一直想做的事——优化它的性能。 原来的程序将离线处理流程分成了非常细致的小步骤,一个七个,比如格式转换、建立索引等。这样做的初衷可能是想方便多人合作开发,或者避免重复操作。但实际上,只要前面的步骤出了问题,后面的都得重来。在处理大数据量时,弊端非常明显,没个步骤都要处理几十G的数据量,不断地从硬盘读出来再写进去,IO负荷非常重。现在的服务器,计算能力可以通过提升频率、多哥CPU等方式得到有效提高,但IO能力仍然非常有效,一般也就10MByte每秒的样子。 要做性能优化,首先要做的就是合并各个小步骤,避免将数据写进去再读出来,直接在一条流水线上将数据处理完毕。这样做,就不用把巨大的中间结果写入硬盘,避免了巨大的IO负荷,同时也免去了一些对中间结果的数理步骤。最后我把七个步骤合并为两个,分别处理图片数据和网页数据,并直接得到最终结果。同时也对多线程、文件读写、图像处理等做了一些优化,效果非常明显,现在处理8M页面和3M图片数据只需要两个多小时,几乎提高了10倍。现在瓶颈已经在CPU,如果换用更好的服务器,可以得到更加的效果。 这是我在MSRA实习近三个月来自己比较满意的工作,也可能是这种主动的热情让我有了欣赏它的心情。一件事情若是自己主动做的,只要结果不太坏,都会很喜欢很高兴,所以啦,我们要尽量寻找积极主动地做事情的机会:-) 程序优化的原则其实很简单,首先是不要做无用的事情,然后不要做重复的事情,尽量利用以前的结果,最后是要寻找到达目标的最短路径。比如说这个项目,好多中间结果是没用的,就不必输出,在内存中利用后直接扔掉。还有些事情是重复的,比如将网页解压缩,按一定格式写会硬盘时又做压缩,最后再解压缩出来做进一步处理,这个压缩和解压缩步骤完全是没有必要的;还有处理图片时,先解码以得到缩略图,后来又重新解码来计算哈希,其实完全可以用生成的缩略图来计算哈希。在寻找最短路径方面,是比较复杂的,很多算法的优化就是做的这件事情。假设输入数据为空间的点A,输出结果为点B,最短路径AB就代表着最优算法。从信息流的角度,比较容易理解这件事情。 |
随便看 |
百科全书收录594082条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。