LINUX.ORG.RU

shared memory: boost vs Sys V


0

1

Один процесс (A) создает shmem. Далее получает данные из буфера
драйвера и записывает в эту shmem. Другой процесс B вычитывает эти
данные, в общем все просто.

Создаю shmem 2-мя способами: shmget или! boost::interprocess. Так
просто сложилось, сначала использовал boost, а потом подумал, нафиг
его тащить.

Так вот, при прочих равных условиях при использовании boost все
работает быстрее, т.е. при увеличении объема данных вариант с shmget
захлебывается (пропускает данные), а при boost - все ОК!
Объяснить это не могу, однако, такое ощущение, что процесс A при
boost пишет в shmem быстрее. В общем, фигня какая-то.

Просто может, кто уже сталкивался с таким ?


берешь буст и смотришь, как оно там внутри делает.

devl547 ★★★★★
()

У себя ни разу не наблюдал особенностей при работе с памятью полученной через shmget. По-моему, всё быстро и корректно. )

mrs
()
Ответ на: комментарий от mrs

Да меня тоже все устраивало, но чудеса какие-то ... :)

drZlo
() автор топика

Вот подумал, а выравнивание никакого делать не надо ?

drZlo
() автор топика
Ответ на: комментарий от drZlo

система должна сама выровнять этот указатель должным образом, но при shmget нужно лишь задать размер кратный размеру страницы (getpagesize).

mrs
()
Ответ на: комментарий от mrs

у меня в начале сегмента разделяемой памяти располагается некая структура, сразу за ней, через страницу - буфер для обмена данными между процессами. данные в этот буфер беспорядочно (без выравнивания) пишут несколько процессов/потоков с помощью memcpy, и один из процессов забирает эти данные... вроде никаких траблов не замечал, всё работает достаточно быстро.

mrs
()

если корректно всё написал, должно быть примерно одинаково, если не изменяет склероз, то он использует System V Shared Memory, хотя хз.

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от Boy_from_Jungle

разницы нет, у меня исходная область с целевой пересекаться не могут.

mrs
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.