Я выполняю огромную задачу [автоматизированный перевод, заданный сценарием с жемчугом + база данных и т.д.] для выполнения в течение приблизительно 2 недель без остановок. При размышлении, как ускорить его, я видел, что переводчик производит все (все переведенные предложения, вся информация о пути) к STDOUT все время. Это заставляет его работать явно медленнее, когда я получаю вывод на консоли.
Я, очевидно, передал вывод по каналу к /dev/null
, но затем я думал, "могло там быть что-то еще быстрее?" Это так производится, что это действительно имело бы значение.
И это - вопрос, я спрашиваю Вас, потому что насколько я знаю, нет ничего быстрее... (Но я далек от того, чтобы быть гуру, использовавшим Linux ежедневно, только длятся 3 года),
Вывод на /dev/null реализован в ядре, которое довольно чертовски быстро. Выходная труба не является вашей проблемой сейчас, это время, необходимое для создания строк, которые отправляются в /dev/null. Я бы рекомендовал вам пройтись по программе и закомментировать (или защитить с помощью if $be_verbose
) все строки, которые являются бесполезными операторами печати. Я почти уверен, что это даст вам заметное ускорение.
Я могу (через dd
) сбрасывать 20 гигабайт данных в секунду на /dev/null. Это не ваше узкое место :-p
Практически единственный способ сделать это быстрее - не генерировать данные в первую очередь - полностью удалить операторы протоколирования. Стоимость создания всех сообщений журнала, вероятно, намного превышает стоимость их отбрасывания.