Подтвердить что ты не робот

Труба против временного файла

Существует большая разница в производительности между:

  • Процесс Запись в файл temp и процесс B, считывающий этот файл
  • Процесс Запись в трубу и процесс чтения B из этого канала

Мне любопытно узнать, что ответ для Windows и * nix.

EDIT: я должен был спросить: устраняет ли буферный кеш разницу между временным файлом и каналом?

4b9b3361

Ответ 1

Одно большое различие заключается в том, что с трубой процессы A и B могут выполняться одновременно, так что B начинает работать на выходе от A до того, как A закончит его производство. Кроме того, размер трубы ограничен, поэтому A не сможет производить значительно больше данных, чем B потреблял; это будет сделано для того, чтобы догнать B.

Если объем данных большой, то запись во временный файл связана с активностью диска, даже если только для создания и уничтожения файла. Данные вполне могут оставаться в пулах буферов в памяти, поэтому нет дискового ввода-вывода - даже для удивительно больших файлов. Запись на трубку "никогда" связана с записью на диск.

Ответ 2

Большая разница заключается в том, что первый метод фактически использует хранилище на диске, тогда как труба будет использовать память (если вы не получите действительно педантичного и не начнете думать о пространстве подкачки).

По производительности, память быстрее, чем диск (почти всегда). Это должно быть в целом справедливо для всех операционных систем.

Единственное время, когда использование временного файла действительно имеет смысл, заключается в том, что процесс B должен анализировать данные за несколько проходов (например, некоторые виды кодирования видео). Для этого использования весь поток данных должен быть буферизирован, и если бы было достаточно данных да, это, вероятно, отрицало бы преимущество в памяти. Таким образом, для операций с несколькими проходами (с привязкой к поиску) перейдите к временному файлу.

Ответ 3

Если мое понимание труб полностью не со стены, ответ ДА.

Запись в файл temp включает в себя доступ к диску и связанные с этим служебные данные.

Запись в трубку и чтение из нее происходит в памяти. Гораздо быстрее.

Ответ 4

Я думал, что практический ответ может помочь. Я оптимизирую скорость script Я использую, что имеет около 4 шагов. Я настроил его на использование методов трубопроводов и трубопроводов. Это находится под 64-разрядной версией Windows 7.

У меня было 3% -ное замедление для того, чтобы не использовать трубопроводы. Для меня это стоит того, потому что теперь я могу остановиться между каждым шагом и обновить заголовок окна, чего не мог, когда это была вся одна команда.

Лично я возьму этот 3% -ный удар для заголовков окон.

Для любопытства я собираю файл > 20M, а затем передаю его в специализированный perl script, который изменяет результаты, а затем сортирует их с помощью окон, созданных в SORT.EXE, а затем унифицирует их с помощью cygwin UNIQ.EXE, затем повторите эти же результаты, чтобы получить grep-результат-раскраску на основе ANSI. Большая часть времени проводится на этапе сортировки.