【问题标题】:Why file read is faster on reading again?为什么文件读取在再次读取时更快?
【发布时间】:2011-05-25 20:52:00
【问题描述】:

SIZE = 1<<16
def justread(file):
    with open(file, 'rb') as f:
        while f.read(SIZE):
            pass

我第一次在一个 700MB 的文件上运行这个函数需要 19 秒。 当我重复
再次读取同一文件所需的时间降至 0.5 秒。
我用很多文件重复了这个,结果是相似的。
这是怎么回事?

【问题讨论】:

    标签: python linux file


    【解决方案1】:

    操作系统caches第一次读取内存中的文件,第二次从内存而不是硬盘读取文件。当然内存要快得多。

    【讨论】:

    • 如果它存储在内存中,为什么它没有显示在内存使用中。
    • @simha 在 linux 上使用“free”命令。它会显示缓存使用的内存
    • 只是问...有没有办法告诉系统在我们读取文件之前缓存它?.....
    • @simha:最简单的方法是读取一次而不保存结果。
    • @simha:内存未被任何特定进程使用;内核只是将东西保存在那里,直到它需要内存用于“更重要”的东西。
    【解决方案2】:

    您的操作系统正在缓存文件。

    什么?这意味着,当你第一次读取文件时,你的程序必须去硬盘驱动器中寻找信息,而硬盘驱动器很慢。

    现在,在第一次读取整个文件之后,Linux 将它保存在内存中以防万一,可能是因为当时没有什么重要的东西可以代替。因此,第二次阅读时,您正在访问内存中的副本,而无需触及硬盘驱动器,这要快几个数量级。

    干杯!

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 2014-06-12
      • 2023-03-16
      • 2012-01-01
      • 2019-04-26
      • 2012-04-05
      • 2017-03-26
      • 2017-02-15
      • 1970-01-01
      相关资源
      最近更新 更多