Я написал эту программу, где в одной части поток берет буферы 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-> (из другого источника), и это делает мою программу слишком медленной.
У кого-нибудь есть идеи более быстрого метода письма?
Спасибо
каждый pcstr-> buff является указателем на размер malloc предварительно настроенного размера 1-5 МБ
Просто сохраните длину где-нибудь. Копирование его в std::string
просто узнать его размер довольно расточительно. Или использовать strlen()
,
однако для записи в канал требуется больше времени, чем для заполнения баффа pcstr-> (из другого источника), и это заставляет мою программу работать слишком медленно.
В Linux максимальный размер буфера канала по умолчанию на сегодня составляет 1 МБ. Вы упомянули, что пишете больше 1Mb в трубу. Когда это происходит, записывающий поток блокируется, пока не будут использованы некоторые данные из канала.
У кого-нибудь есть идеи более быстрого метода письма?
Используйте простой файл в /dev/shm
или же /tmp
, На последних Linux’ах /tmp
файловая система в памяти Это работает только в том случае, если объем данных, передаваемых по каналу, можно сохранить в файле, не превышая объем свободного дискового пространства или памяти.
Других решений пока нет …