zoukankan      html  css  js  c++  java
  • 系统优化笔记

    从系统层面去优化系统往往有更为明显的效果,优化之前,可以思考,是否能够通过扩展系统来达到提高性能的目的:
    (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
    内存池干什么?提前分配内存以获取更好的性能,只是适应性可能会降低,并可能造成内存浪费。
    内存池为什么有效?避免重复内存申请、释放开销。
    内存池的难点是什么?分配多大的内存池,如何避免浪费都是需要考虑的问题。
    内存池在哪些情况下有效?一是固定大小的内存需求,二是快速的分配与释放需求。

    应对软件变化
  • 相关阅读:
    使用Loadrunner监控Windows资源
    Tomcat使用线程池配置高并发连接
    性能测试中遇到的坑
    本地eclipse启动tomcat后无法访问
    Linux常用命令汇总
    Dubbo底层采用Socket进行通信详解
    今天遇到了一个Spring出现的一个未知错误,分享下
    maven pom.xml 详细
    Oracle 数据库中在使用中文模糊查询时输入中文查询不到结果的解决方法
    mybatis属性详解
  • 原文地址:https://www.cnblogs.com/windpoplar/p/10596899.html
Copyright © 2011-2022 走看看