Самый быстрый способ записи в трубу

Я написал эту программу, где в одной части поток берет буферы char * и записывает их в канал
это было создано следующим образом:

 ret_val = mkfifo(lpipename.c_str(), 0666);
pipehandler = open(lpipename.c_str(), O_RDWR);

затем я пишу в канал один буфер за другим следующим образом:

 int size = string(pcstr->buff).length()
numWritten = write(pipehandler, pcstr->buff, size);

каждый pcstr-> buff является указателем на размер malloc предварительно настроенного размера 1-5 МБ

однако, это занимает слишком много времени для записи в канал, чем для заполнения баффа pcstr-> (из другого источника), и это делает мою программу слишком медленной.

У кого-нибудь есть идеи более быстрого метода письма?

Спасибо

0

Решение

каждый pcstr-> buff является указателем на размер malloc предварительно настроенного размера 1-5 МБ

Просто сохраните длину где-нибудь. Копирование его в std::string просто узнать его размер довольно расточительно. Или использовать strlen(),

однако для записи в канал требуется больше времени, чем для заполнения баффа pcstr-> (из другого источника), и это заставляет мою программу работать слишком медленно.

В Linux максимальный размер буфера канала по умолчанию на сегодня составляет 1 МБ. Вы упомянули, что пишете больше 1Mb в трубу. Когда это происходит, записывающий поток блокируется, пока не будут использованы некоторые данные из канала.

У кого-нибудь есть идеи более быстрого метода письма?

Используйте простой файл в /dev/shm или же /tmp, На последних Linux’ах /tmp файловая система в памяти Это работает только в том случае, если объем данных, передаваемых по каналу, можно сохранить в файле, не превышая объем свободного дискового пространства или памяти.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]