Является ли чтение / запись в канал дорогой операцией? - PullRequest
3 голосов
/ 13 октября 2010

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 13 октября 2010

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

1 голос
/ 13 октября 2010

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

...