Каково снижение производительности при подключении/отключении общей памяти с усечением на лету? ⇐ C++
Каково снижение производительности при подключении/отключении общей памяти с усечением на лету?
Я пытаюсь создать кольцевой буфер с общей памятью (IPC). Это будет использоваться для передачи больших блоков данных другому процессу, причем быстро - блоков размером около 1 МБ со скоростью около 100 блоков в секунду. Я видел, что в большинстве реализаций просто используется предварительно выделенный большой блок общей памяти, который затем разбивается на более мелкие сегменты со смещениями, образуя обычный массив фиксированного размера.
Я хотел бы сделать это немного по-другому: каждый блок, который будет использоваться для передачи, использует отдельный блок общей памяти, а блоки присоединяются и отсоединяются в цикле (синхронизируются по именованным семафорам). Процесс отправителя также может потенциально обрезать блок перед его присоединением.
Какого снижения производительности следует ожидать в таких условиях по сравнению с использованием одного твердотельного блока памяти (без активного подключения/отключения в процессе)?
Мой вопрос скорее заключается в том, часто ли используется реализация с сплошным блоком со срезами только потому, что ее легче идентифицировать по одному имени (поэтому фактический штраф находится в процессе инициализации) или потому, что снижение производительности для операция подключения и отключения блоков памяти существенно нагружает производительность процесса.
Я пытаюсь создать кольцевой буфер с общей памятью (IPC). Это будет использоваться для передачи больших блоков данных другому процессу, причем быстро - блоков размером около 1 МБ со скоростью около 100 блоков в секунду. Я видел, что в большинстве реализаций просто используется предварительно выделенный большой блок общей памяти, который затем разбивается на более мелкие сегменты со смещениями, образуя обычный массив фиксированного размера.
Я хотел бы сделать это немного по-другому: каждый блок, который будет использоваться для передачи, использует отдельный блок общей памяти, а блоки присоединяются и отсоединяются в цикле (синхронизируются по именованным семафорам). Процесс отправителя также может потенциально обрезать блок перед его присоединением.
Какого снижения производительности следует ожидать в таких условиях по сравнению с использованием одного твердотельного блока памяти (без активного подключения/отключения в процессе)?
Мой вопрос скорее заключается в том, часто ли используется реализация с сплошным блоком со срезами только потому, что ее легче идентифицировать по одному имени (поэтому фактический штраф находится в процессе инициализации) или потому, что снижение производительности для операция подключения и отключения блоков памяти существенно нагружает производительность процесса.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Есть ли снижение производительности при использовании Memory_order_relaxed?
Anonymous » » в форуме C++ - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-