これは、前の質問のフォローアップの質問です。
このコードを考えてみましょう。これは、前の質問のコードよりもおもちゃっぽくありません(ただし、実際のコードよりははるかに単純です)。
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」というタグを付けました。やる価値があると思われる場合は、OSに依存しない、または他のOSの回答を自由に提供してください。