Это дополнительные вопросы к предыдущему.
Рассмотрим этот код, который менее забавен, чем код в предыдущем вопросе (но все же намного проще моего настоящего)
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 () выполняется параллельно с вводом-выводом.
Это хорошие новости!
Но как это работает? Это задокументированная функция? Есть ли какие-либо требования к моему коду, которым я должен следовать, чтобы он работал в максимально возможной степени (помимо балансировки нагрузки ввода-вывода и операций с памятью / процессором)? Или это просто буферизация / кеширование в действии?
Опять же, я пометил этот вопрос "linux", потому что меня интересуют только ответы, специфичные для linux. Не стесняйтесь давать ответы, не зависящие от ОС или даже от других ОС, если вы считаете, что это стоит того.