在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1 FIFO1.1. 原理按照“先进先出(First In,First Out)”的原理淘汰数据。 1.2. 实现FIFO队列,具体实现如下:
1. 新访问的数据插入FIFO队列尾部,数据在FIFO队列中顺序移动; 2. 淘汰FIFO队列头部的数据;
1.3. 分析l 命中率 命中率很低,因为命中率太低,实际应用中基本上不会采用。 l 复杂度 简单 l 代价 实现代价很小。
2. Second Chance2.1. 原理FIFO算法的改进版,其思想是“如果被淘汰的数据之前被访问过,则给其第二次机会(Second Chance)”。 2.2. 实现每个数据会增加一个访问标志位,用于标识此数据放入缓存队列后是否被再次访问过。
如上图,A是FIFO队列中最旧的数据,且其放入队列后没有被再次访问,则A被立刻淘汰;否则如果放入队列后被访问过,则将A移到FIFO队列头,并且将访问标志位清除。 如果所有的数据都被访问过,则经过一次循环后就会按照FIFO的原则淘汰数据。 2.3. 分析l 命中率 命中率比FIFO高。 l 复杂度 与FIFO相比,需要记录数据的访问标志位,且需要将数据移动。 l 代价 实现代价比FIFO高。
3. Clock3.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类算法对比
由于FIFO类算法命中率相比其他算法要低不少,因此实际应用中很少使用此类算法。 |
请发表评论