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

性能优化的常见思路

作者: 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%的时间。

总结

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

相关文章

  • 性能优化的常见思路

    结合大学时计算机组成原理老师的教导,和本人积累的经验和思考,将一些系统性能优化的套路总结了一下。不包含具体的优化场...

  • Awesome Extra

    性能优化 性能优化模式 常见性能优化策略的总结 Spark 性能优化指南——基础篇 Spark 性能优化指南——高...

  • 1- 高性能并发框架disruptor介绍

    该要 前面介绍了服务端性能优化的常见思路,在应用层,选用合适的并发编程框架,能很好的优化服务性能disruptor...

  • iOS开发中常见的性能优化技巧

    iOS开发中常见的性能优化技巧 iOS开发中常见的性能优化技巧

  • 数据库优化

    优化思路 优化上有两个主要方面:安全与性能 安全 ---> 数据可持续性 性能 ---> 数据的高性能访问 优化维...

  • 微服务性能优化

    目录 一、优化思路 二、优化方向 三、优化实战 (一)服务背景 (二)优化方向 一、优化思路 清楚性能基线 只有清...

  • 说一说那些我也不太懂的 Python 对象优化

    我们通常做性能优化的思路是:先优化业务逻辑,再优化架构,最后再优化语言的数据结构等。所以如果想将性能优化到极致,往...

  • Web前端性能优化思路

    本文旨在整理常见Web前端性能优化的思路,可供前端开发参考。因为力求精简,限于篇幅,所以并未详述具体实施方案。 基...

  • MYSQL优化杂谈二,Query优化

    Query 优化基本思路 优化更需要优化的Query,什么语句更需要优化? 定位优化对象的性能瓶颈; 明确的优化目...

  • 转载:史上更全的 MySQL 高性能优化实战总结!

    转载:史上更全的 MySQL 高性能优化实战总结! 1 前言 2 优化的哲学 3 优化思路 3.1 优化什么 3....

网友评论

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

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