【问题标题】:Theory of caching [closed]缓存理论
【发布时间】:2009-06-17 11:03:47
【问题描述】:

缓存有统一的理论吗? 也就是说,用于构造缓存和/或优化缓存的定理和算法的集合?

这个问题故意很宽泛,因为我要寻找的结果也很宽泛。 最大可实现加速的公式,缓存算法的指标,诸如此类。 一本大学水平的教科书可能是理想的。

【问题讨论】:

    标签: caching theory


    【解决方案1】:

    现实世界中的绝大多数缓存都涉及利用“80-20 规则”或Pareto distribution。请参阅下面的外观

    这在应用程序中表现为:

    • 大部分运行时都花在同一段代码中(使 CPU 上的代码缓存有效)
    • 通常,当一个变量被访问时,它很快就会被再次访问(使 CPU 上的数据缓存有效)
    • 当浏览器查找网站的主机名一次时,它会在不久的将来相当频繁地访问它(使 DNS 缓存有效)

    因此,我会说“缓存理论”是使用一些额外的资源,这些资源通常“稀有”但“快速”,以补偿您将要做的最活跃的重复性事情。

    您这样做的原因是为了根据上面高度倾斜的图表尝试“平衡”您执行“慢”操作的次数。

    【讨论】:

      【解决方案2】:

      我与学校的一位教授交谈,他将我指向online algorithms, 这似乎是我正在寻找的主题。

      缓存算法和页面替换算法之间有很多重叠之处。我可能会编辑这些主题的维基百科页面以澄清联系,一旦我 了解了有关该主题的更多信息。

      【讨论】:

        【解决方案3】:

        如果您可以假设缓存命中比缓存未命中快得多,您会发现超时,即使您只有缓存未命中,使用缓存仍然会比不使用缓存快或快。

        请参阅下面的数学:

        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
        

        当然,这适用于请求数量无穷大的情况,但您可以看到这将如何通过使用缓存轻松加速您的系统。

        【讨论】:

        • 你的计算看起来很不错。不幸的是,它暗示了缓存未命中次数是恒定的假设,这似乎不太可能。正确的数字是:HitProbability * TimePerHit + (1 - HitProbability) * TimePerMiss
        • 我知道数学有点不确定;这是我去年秋天上的一门课必须学习的证明,我只是想从那里回忆起来。不过,解决您的问题,因为我有 CacheHits 与 CacheMisses,这是一个比率,所以这与使用命中概率不一样吗?
        • 不完全。假设缓存未命中的概率恒定为非零,如果执行无限次试验,将有无限多的未命中。如果缓存足够大以容纳将被请求的每条数据,那么您的公式将是正确的。然后,未命中次数有一个恒定的上限。
        • 是的,同意 Fogh 的观点。一开始听起来也不对。
        • 我基本上是说使用缓存对系统的开销可以忽略不计。随着请求数量向无穷大增加,开销基本为零。
        猜你喜欢
        • 2014-02-16
        • 1970-01-01
        • 2010-11-01
        • 2019-02-11
        • 2021-01-24
        • 2016-07-18
        • 2017-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多