美文网首页
性能优化的常见思路

性能优化的常见思路

作者: Matrix0x7C | 来源:发表于2017-08-03 22:35 被阅读0次

    结合大学时计算机组成原理老师的教导,和本人积累的经验和思考,将一些系统性能优化的套路总结了一下。不包含具体的优化场景,只提供方向。
    所以本文看起来会有点废话连篇。

    1. Profiling

    系统优化之前最重要的是profiling,profile有“画像,轮廓”的意思,可以理解为对整个系统进行摸底,看一下每个过程需要多长时间,过程是并行的还是串行的等等。
    在profiling完成之后,应当能区分出流程中的子系统。

    子系统区分如何完成,主要看耗费时间的数量级。
    数量级差不多的流程,就可以划分到一个子系统里。

    子系统划分出来,按照流程连接,就形成一个DAG,求出关键路径之后,优化的工作才能启动。

    2. 子系统的优化

    在子系统中,时间耗费的数量级一样,因此第一条优化思路就是加快经常性事件

    对于程序优化,就是找热点函数。各语言都有自己的profiling工具,这里不细讲。

    问题来了,如何加快经常性事件?
    有下面几种套路

    3. 使用更优的算法

    我们可能创造不出快排这种算法,也想不出红黑树这种数据结构。
    但是有一些套路还是比较简单的。
    比如:

    预先处理

    比如预先计算,预先申请,预先读取等等。
    预先计算就是先将所有可能的结果计算出来,外部需要的时候直接取。

    增量处理

    增量处理算法上也要做支持,这里的例子就太多了。
    比如数据库的增量备份和同步,文件的增量打包和同步等等。

    批量处理

    将原本需要多次传输、多次写入或多次读取的操作,改成一次批量处理。

    4. 使用更快的存储器

    mysql换成redis,硬盘换成内存,内存换成cache,使用更快的存储器来存储你的数据,可以显著提升效率。
    在实践上,我们用redis存储不太重要的数据;把文件加载到内存,不用每次读取;给CPU加上L1 Cache,L2 Cache,不用每次从内存中取。

    5. 使用更多的CPU

    这里包含两个方向:一个是从单线程到多线程的优化,一个是多线程之间的优化。
    单线程到多线程的优化,可能会受到场景的限制,有些场景可能本来就是串行的,无法进行多核优化。
    多线程之间的优化,就是同步手段的优化,比如互斥锁改为读写锁,一些简单的场景,可能原子操作就能满足要求。
    一些压缩算法,是可以并行处理的,利用多核的优势,可以很轻松的减少50-75%的时间。

    总结

    总体来看,优化的方向在于计算,存储,并行三大方向,当然这三个方面也要相互配合才能达到最佳效果。

    相关文章

      网友评论

          本文标题:性能优化的常见思路

          本文链接:https://www.haomeiwen.com/subject/luqmxxtx.html