Это последующие вопросы по предыдущему.
Рассмотрим этот код, который менее игрушечный, чем предыдущий вопрос (но все же намного проще, чем мой реальный)
import sys
data=[]
for line in open(sys.argv[1]):
data.append(line[-1])
print data[-1]
Теперь я ожидал более длительного времени работы (мой тестовый файл длиной 65150224 строки), возможно, намного дольше. Это было не так, он работает в ~ 2 минуты на том же hw, что и раньше!
Является ли 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 и операций с памятью/процессором)? Или это просто буферизация/кеширование в действии?
Опять же, я отметил "linux" этот вопрос, потому что меня интересуют только конкретные ответы на Linux. Не стесняйтесь давать OS-агностик или даже ответы других ОС, если вы считаете, что это стоит того.