【发布时间】:2009-06-17 11:03:47
【问题描述】:
缓存有统一的理论吗? 也就是说,用于构造缓存和/或优化缓存的定理和算法的集合?
这个问题故意很宽泛,因为我要寻找的结果也很宽泛。 最大可实现加速的公式,缓存算法的指标,诸如此类。 一本大学水平的教科书可能是理想的。
【问题讨论】:
缓存有统一的理论吗? 也就是说,用于构造缓存和/或优化缓存的定理和算法的集合?
这个问题故意很宽泛,因为我要寻找的结果也很宽泛。 最大可实现加速的公式,缓存算法的指标,诸如此类。 一本大学水平的教科书可能是理想的。
【问题讨论】:
现实世界中的绝大多数缓存都涉及利用“80-20 规则”或Pareto distribution。请参阅下面的外观
这在应用程序中表现为:
因此,我会说“缓存理论”是使用一些额外的资源,这些资源通常“稀有”但“快速”,以补偿您将要做的最活跃的重复性事情。
您这样做的原因是为了根据上面高度倾斜的图表尝试“平衡”您执行“慢”操作的次数。
【讨论】:
我与学校的一位教授交谈,他将我指向online algorithms, 这似乎是我正在寻找的主题。
缓存算法和页面替换算法之间有很多重叠之处。我可能会编辑这些主题的维基百科页面以澄清联系,一旦我 了解了有关该主题的更多信息。
【讨论】:
如果您可以假设缓存命中比缓存未命中快得多,您会发现超时,即使您只有缓存未命中,使用缓存仍然会比不使用缓存快或快。
请参阅下面的数学:
Number of hits = NumRequests - #CacheMisses
AverageTime = ((NumRequests-#CacheMisses) * TimePerHit + #CacheMisses * TimePerMiss)/NumRequests
如果我们假设 NumRequests 是无穷大(这是一个极限问题,不要害怕微积分),我们可以看到:
AverageTime = Infinity*TimePerHit/Infinity - #CacheMisses*TimePerHit/Infinity + #CacheMisses*TimePerMiss/Infinity
#CacheMisses 的两项都归零,但整个等式解析为:
AverageTime = TimePerHit
当然,这适用于请求数量无穷大的情况,但您可以看到这将如何通过使用缓存轻松加速您的系统。
【讨论】: