这是上一个问题的后续问题。
考虑一下这段代码,它比上一个问题中的代码不那么玩具(但仍然比我的真实代码简单得多)
import sys
data=[]
for line in open(sys.argv[1]):
data.append(line[-1])
print data[-1]
现在,我期待更长的运行时间(我的基准文件长 65150224 行),可能更长。情况并非如此,它在与以前相同的硬件上运行约 2 分钟!
data.append() 是不是很轻量级?我不相信,所以我写了这个假代码来测试它:
data=[]
counter=0
string="a\n"
for counter in xrange(65150224):
data.append(string[-1])
print data[-1]
这在 1.5 到 3 分钟内运行(运行之间存在很大的可变性)
为什么我在前一个节目中得不到 3.5 到 5 分钟?显然 data.append() 与 IO 并行发生。
这是个好消息!
但它是如何工作的?它是记录在案的功能吗?对我的代码是否有任何要求以使其尽可能地工作(除了负载平衡 IO 和内存/CPU 活动)?还是只是简单的缓冲/缓存在起作用?
再次,我标记了“linux”这个问题,因为我只对 linux 特定的答案感兴趣。如果您认为值得做,请随意给出与操作系统无关的,甚至是其他操作系统的答案。