• 系统优化笔记


    从系统层面去优化系统往往有更为明显的效果,优化之前,可以思考,是否能够通过扩展系统来达到提高性能的目的:
    (1)Scale up:使用更强的硬件;
    (2)Scale out:使用更多的组件;

    如果升级硬件的方法就能解决问题,为什么还要使用修改代码,调整架构这样大风险的举措呢?(需要考虑成本)
    以下是一些常用的系统优化的方法:
    (1)Cache
    Cache干什么?保存已经执行过的结果。
    Cache为什么有效?避免已计算过的开销,获取更快的访问。
    Cache的难点在哪里?一是快速匹配;二是Cache容量有效,需要较好的替换策略;
    Cache在哪些情况下有效?时间局部性。即当前计算的结果,后续有可能使用到,如果没有时间局部性,反而对架构有害。

    (2)Lazy Computing
    理念就是,不要做多余的事情,最常见的例子就是COW(copy-on-write):
    http://en.wikipedia.org/wiki/Copy-on-write
    COW干什么?写时复制。
    COW为什么有效?节省内存复制时间,均匀内存分配时间。
    COW的难点在哪里?一是引用计数的使用;二是确认哪些内存是可以共享的。

    (3)read ahead/pre-fetch预读
    http://en.wikipedia.org/wiki/Readahead
    预读干什么?提前准备所需要的数据。
    预读为什么有效?减少等待内存的时间,相当于把多个操作集合成一个。
    预读在哪些情况下有效?空间局部性。

    (4)Asynchronous异步
    http://en.wikipedia.org/wiki/Asynchronous_I/O
    异步干什么?异步是一种通信方式,请求与应答分离。
    异步为什么有效?消除等待时间。
    异步的难点是什么?如何实现分布式状态机,如何使用回调,使异步时间到达后继续执行。
    异步在哪些情况下有效?状态之间不能有强依赖关系。

    (5)Polling轮询
    http://en.wikipedia.org/wiki/Polling_(computer_science)

    (6)Static memory pool(内存池)
    http://en.wikipedia.org/wiki/Static_memory_allocation
    内存池干什么?提前分配内存以获取更好的性能,只是适应性可能会降低,并可能造成内存浪费。
    内存池为什么有效?避免重复内存申请、释放开销。
    内存池的难点是什么?分配多大的内存池,如何避免浪费都是需要考虑的问题。
    内存池在哪些情况下有效?一是固定大小的内存需求,二是快速的分配与释放需求。

    应对软件变化
  • 相关阅读:
    TSQL常用查询语句
    团队开发注意事项
    SQLServer2005 XML数据类型操作
    Nunit学习笔记
    服务器架构工具表
    JQuery 做的下拉文本框
    面向对象和结构化程序设计的区别
    AFX_MSG是什么意思
    DECLARE_MESSAGE_MAP()
    AfxBeginThread的介绍/基本用法
  • 原文地址:https://www.cnblogs.com/windpoplar/p/10596899.html
Copyright © 2020-2023  润新知