трубы против tmfiles.Что лучше и почему? - PullRequest
4 голосов
/ 28 февраля 2011

Я хочу написать программу, которая создает дочерний процесс и перенаправляет его потоки stdout и stderr на родительский. Итак, что является хорошим выбором, чтобы сделать это для хорошей производительности tmpfile () или pipe (), и почему?

Ответы [ 3 ]

6 голосов
/ 28 февраля 2011

Используйте pipe, где это возможно, если только вы не ожидаете, что большое количество входных данных будет накапливаться в потоке без чтения. Канал хранит данные в оперативной памяти, где временный файл требует операций файловой системы. fdsync для файла будет намного дороже, чем для канала. Труба также менее уязвима для проблем безопасности, вызванных условиями гонки.

Если ваше приложение не может использовать семантику канала (для его вывода требуется путь к файловой системе или аналогичная проблема), попробуйте использовать «именованный канал» (также называемый FIFO).

0 голосов
/ 28 февраля 2011

Основным недостатком трубы является то, что она недоступна для поиска, то есть потребитель не может пропустить или перемотать назад.Если для обмена данными не требуется это свойство, лучше выбрать канал.

0 голосов
/ 28 февраля 2011

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

...