zoukankan      html  css  js  c++  java
  • Go -- FIFO类(缓存淘汰算法)(转)

    1 FIFO

    1.1. 原理

    按照“先进先出(First In,First Out)”的原理淘汰数据。

    1.2. 实现

    FIFO队列,具体实现如下:

    1. 新访问的数据插入FIFO队列尾部,数据在FIFO队列中顺序移动;

    2. 淘汰FIFO队列头部的数据;

    1.3. 分析

    l 命中率

    命中率很低,因为命中率太低,实际应用中基本上不会采用。

    l 复杂度

    简单

    l 代价

    实现代价很小。

    2. Second Chance

    2.1. 原理

    FIFO算法的改进版,其思想是“如果被淘汰的数据之前被访问过,则给其第二次机会(Second Chance)”。

    2.2. 实现

    每个数据会增加一个访问标志位,用于标识此数据放入缓存队列后是否被再次访问过。

    如上图,A是FIFO队列中最旧的数据,且其放入队列后没有被再次访问,则A被立刻淘汰;否则如果放入队列后被访问过,则将A移到FIFO队列头,并且将访问标志位清除。

    如果所有的数据都被访问过,则经过一次循环后就会按照FIFO的原则淘汰数据。

    2.3. 分析

    l 命中率

    命中率比FIFO高。

    l 复杂度

    与FIFO相比,需要记录数据的访问标志位,且需要将数据移动。

    l 代价

    实现代价比FIFO高。

    3. Clock

    3.1. 原理

    Clock是Second Chance的改进版,通过一个环形队列,避免将数据在FIFO队列中移动。

    3.2. 实现

    如上图,其具体实现如下:

    l 当前指针指向C,如果C被访问过,则清除C的访问标志,并将指针指向D;

    l 如果C没有被访问过,则将新数据插入到C的位置,将指针指向D。

    3.3. 分析

    l 命中率

    命中率比FIFO高,和Second Chance一样。

    l 复杂度

    与FIFO相比,需要记录数据的访问标志位,且需要将数据指针移动。

    l 代价

    实现代价比FIFO高,比Second Chance低。

    4. FIFO类算法对比

    对比点

    对比

    命中率

    Clock =  Second Chance > FIFO

    复杂度

    Second Chance  > Clock > FIFO

    代价

    Second Chance  > Clock > FIFO

    由于FIFO类算法命中率相比其他算法要低不少,因此实际应用中很少使用此类算法。

  • 相关阅读:
    mysql数据库开放远程连接的方法
    MySQL数据库字符集由utf8修改为utf8mb4一例
    解决silk-v3-decoder-master转换wav时,百度语音解析问题
    PHP高效率写法(详解原因)
    如何计算服务器能够承受多大的pv?
    微信开发中使用curl忽略https证书
    PHP libevent函数基本介绍
    PHP stream相关协议及上下文选项和参数归纳
    Centos搭建PHP5.3.8+Nginx1.0.9+Mysql5.5.17
    编码转换(UTF8->GBK)
  • 原文地址:https://www.cnblogs.com/mafeng/p/7346711.html
Copyright © 2011-2022 走看看