【发布时间】: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 秒。
我用很多文件重复了这个,结果是相似的。
这是怎么回事?
【问题讨论】:
SIZE = 1<<16
def justread(file):
with open(file, 'rb') as f:
while f.read(SIZE):
pass
我第一次在一个 700MB 的文件上运行这个函数需要 19 秒。
当我重复
再次读取同一文件所需的时间降至 0.5 秒。
我用很多文件重复了这个,结果是相似的。
这是怎么回事?
【问题讨论】:
操作系统caches第一次读取内存中的文件,第二次从内存而不是硬盘读取文件。当然内存要快得多。
【讨论】:
您的操作系统正在缓存文件。
什么?这意味着,当你第一次读取文件时,你的程序必须去硬盘驱动器中寻找信息,而硬盘驱动器很慢。
现在,在第一次读取整个文件之后,Linux 将它保存在内存中以防万一,可能是因为当时没有什么重要的东西可以代替。因此,第二次阅读时,您正在访问内存中的副本,而无需触及硬盘驱动器,这要快几个数量级。
干杯!
【讨论】: