性能工程高手课
庄振运
Facebook 性能优化和容量管理高级专家
24631 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
性能工程高手课
15
15
1.0x
00:00/00:00
登录|注册

20 | 性能优化十大策略:如何系统地有层次地优化性能问题?

不同数据结构的特性
不同算法实现
网络请求合并
数据库读写操作合并
批量IO读写
计算结果缓存
连接池和线程池
CPU、内存、文件系统、存储系统、内容分布、数据库缓存
异步文件操作
异步编程
多线程并行处理
多核CPU并行处理
COW(Copy On Write)
CPU和内存预取
文件系统预读
Web资源提前加载
CDN内容分发网络
数据多份拷贝
外部存储
数据压缩
改变数据结构或数据格式
高效的数据结构
先进的算法
批量合并处理
缓存数据
异步操作
并行操作
延后/惰性处理
预先/提前处理
用空间换时间
用时间换空间
更先进算法和数据结构
缓存/批量合并
并行/异步操作
预先/延后处理
时空相互转换
性能优化十大策略

该思维导图由 AI 生成,仅供参考

你好,我是庄振运。
上一讲中,我们聊了性能优化的六大原则。原则有了,但是在针对实际的性能问题的时候,用什么样的解决方案才可以提升性能呢?这就需要你了解具体的优化策略了。
现实中的性能问题和具体领域千差万别,我也不可能面面俱到。但是为了帮助你理解,我总结了十大常用的优化策略。
我将这十大策略分成五个类别,每个类别对应两个相关策略,帮助你掌握。这五个类别是:时空相互转换、并行 / 异步操作、预先 / 延后处理、缓存 / 批量合并、算法设计和数据结构。我们现在一个个来讲。

时空转换

第一个策略类别是“时空转换”。我们看科幻电影和小说的时候,经常会看到时空转换这个题材。性能优化里面有两个策略恰好组成了这个类别,包括“用时间换空间”和“用空间换时间”这两个看似互相对立的策略。

1. 用时间换空间

用时间换空间的策略,出发点是内存和存储这样的“空间”资源,有时会成为最稀缺的资源,所以需要尽量减少占用的空间。比如,一个系统的最大性能瓶颈如果是内存使用量,那么减少内存的使用就是最重要的性能优化。
这个策略具体的操作方法有几种:
改变应用程序本身的数据结构或者数据格式,减少需要存储的数据的大小;
想方设法压缩存在内存中的数据,比如采用某种压缩算法,真正使用时再解压缩;
把一些内存数据,存放到外部的、更加便宜的存储系统里面,到需要时再取回来。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文总结了十大性能优化策略,涵盖了时空相互转换、并行/异步操作、预先/延后处理、缓存/批量合并、算法设计和数据结构五个类别。在时空相互转换方面,介绍了“用时间换空间”和“用空间换时间”两种策略,针对内存和存储资源的优化。预先/延后处理方面提到了预先/提前处理和延后/惰性处理两种策略,以及它们在文件系统、CPU和内存中的应用。并行/异步操作方面介绍了并行操作和异步操作的概念,以及它们在多核CPU和IO阻塞处理中的应用。缓存/批量合并策略包括缓存数据和批量合并处理,涉及CPU、内存、文件系统、存储系统、内容分布、数据库等领域。最后,讨论了更先进算法和数据结构的重要性,强调了在不同场景下选择最适合的算法和数据结构的重要性。这些策略对于解决软件开发中常见的性能问题具有实用价值,有助于开发人员从不同角度思考问题,找到更好的解决方案。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能工程高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • 黄海峰
    c++的string具有写时拷贝的实现吗?是哪个stl实现这样做的?

    作者回复: 以前有的,刚刚查了一下,似乎11版本的C++ standard library改了,不让用了。谢谢指出!

    2020-01-15
  • benny
    每一种都来一个实例就好了
    2020-03-22
    6
  • 许童童
    老师总结得很好,这五大性能优化的策略,基本上概括了我们程序优化的各种方法。
    2020-01-11
    2
  • 罗辑思维
    非常有收获。
    2020-03-07
  • 思路是这样的,总结的OK
    2020-03-05
  • LQQ
    java的arrylist和linklist,前者是读写性能比较好,后者是链表结构,删除和插入性能比较好
    2020-03-03
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部