Могу ли я получить более быстрый выходной канал, чем / dev / null? - PullRequest
12 голосов
/ 28 апреля 2010

Я выполняю огромную задачу [автоматический перевод с использованием Perl + базы данных и т. Д.], Которая должна выполняться без перерыва около 2 недель. Размышляя о том, как это ускорить, я увидел, что переводчик все время выводит (все переведенные предложения, всю информацию в пути) в STDOUT. Это заставляет его работать заметно медленнее, когда я получаю вывод на консоль.

Я, очевидно, передал вывод на /dev/null, но потом подумал: "Может ли быть что-то еще быстрее?" Это так много продукции, что это действительно имеет значение.

И это вопрос, который я задаю Вам, потому что, насколько я знаю, нет ничего быстрее ... (Но я далеко не гуру, использующий linux ежедневно только последние 3 года)

Ответы [ 2 ]

21 голосов
/ 28 апреля 2010

Вывод в / dev / null реализован в ядре, что довольно быстро. Выходной канал теперь не является вашей проблемой, это время, которое требуется для построения строк, которые отправляются в / dev / null. Я бы порекомендовал вам пройтись по программе и закомментировать (или защитить с помощью if $be_verbose) все строки, которые являются бесполезными выражениями печати. Я уверен, что это даст вам заметное ускорение.

18 голосов
/ 28 апреля 2010

Я могу (через dd) сбросить 20 гигабайт данных в секунду вниз / dev / null. Это не ваше узкое место: -p

Практически единственный способ сделать это быстрее - это вообще не генерировать данные - полностью удалить операторы регистрации. Стоимость создания всех сообщений журнала, вероятно, превышает стоимость их отбрасывания.

...