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