代码之家  ›  专栏  ›  技术社区  ›  Jørgen Fogh

缓存理论[关闭]

  •  11
  • Jørgen Fogh  · 技术社区  · 15 年前

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

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

    3 回复  |  直到 15 年前
        1
  •  3
  •   Community skywinder    7 年前

    绝大多数真实缓存都涉及到利用“80-20规则”或 Pareto distribution . 下面是它的外观

    Pareto distribution

    这在应用程序中表现为:

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

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

    你这样做的原因是试图根据上面高度倾斜的图表来“调整”你执行“慢速”操作的次数。

        2
  •  3
  •   Jørgen Fogh    15 年前

    我和我学校的一位教授谈过,他指给我看 online algorithms , 这似乎是我要找的话题。

    缓存算法和页面替换算法之间有很多重叠。我可能会为这些主题编辑维基百科页面,以澄清连接,一旦我 对这门学科有了更多的了解。

        3
  •  2
  •   foobarfuzzbizz    15 年前

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

    数学见下文:

    Number of hits = NumRequests - #CacheMisses
    
    AverageTime = ((NumRequests-#CacheMisses) * TimePerHit + #CacheMisses * TimePerMiss)/NumRequests
    

    如果我们假设NoMeDebug是无穷大的(这是一个极限问题,不要害怕微积分),我们可以看到:

    AverageTime = Infinity*TimePerHit/Infinity - #CacheMisses*TimePerHit/Infinity + #CacheMisses*TimePerMiss/Infinity
    

    缓存未命中的两个项都归零,但整个方程解析为:

    AverageTime = TimePerHit
    

    当然,这是因为请求的数量是无穷大的,但是您可以看到这将如何通过使用缓存轻松地加快您的系统。