2010-10-13 2 views
3

В рамках моего курса Uni нам показали и попросили использовать трубы для связи между процессами (используя pipe() и fork()) для нескольких небольших упражнений. Нет проблем, чтобы заставить его работать или с концепцией, но вне этих требований мне интересно, насколько эффективно писать и читать с помощью такого канала?Является ли чтение/письмо трубе дорогой операцией?

Если у меня есть значение, которое я упаковываю в блок из 4 байтов, лучше ли упаковать и записать 100 значений (так 400 байт) одновременно?

Или производительность сопоставима, если я делаю 100 записей каждый из 4 байтов?

Прокладывает ли 400 байтов за один прием, чтобы приемник ничего не делал до тех пор, пока запись не будет выполнена - предполагается, что приемник только пытается прочитать первые 4 байта, сможет ли он сделать это после их написания, но прежде все 400 закончилось?

ответ

4

Трубы обрабатываются аналогично файлам (конечно, они не на диске). Они буферизуются одними и теми же способами, и обращение к ним обрабатывается аналогичным образом. Не пытайтесь вручную буферировать для трубы; он делает это уже. Если вы действительно обеспокоены этим, вы можете попробовать оба способа и собрать некоторое время выполнения. Я бы предложил просто писать блоки из 4 байтов, как они есть у вас. Не пытайтесь оптимизировать, если не знаете, что есть проблема.

+0

Это было скорее любопытство, чем беспокойство, и это в значительной степени ответ, который я надеялся получить. Благодаря! – DMA57361

1

Я могу рассказать вам анекдот. Однажды я работал над веб-системой для встроенной платформы Linux. Мы пробовали трубы для внутренней связи, потому что они были намного быстрее, чем сокеты UNIX или сокеты TCP. В конце концов мы использовали сокеты в любом случае, потому что их было проще использовать в нашем приложении. (Нам нужна двусторонняя связь, а трубы - только один способ.)

Смежные вопросы