LINUX.ORG.RU

Накостылить IPC

 , ,


0

3

Ребята, нужно придумать эффективную схему inter process communication. Имеются несколько процессов (назовем их slaves), которые общаются с одним главным процессом (назовем master). Подчеркиваю - речь о процессах, а не о потоках. Между master и slaves гоняются весьма большие куски данных. FIFO отмел ввиду тормознутости, остановился на shared memory. И вот тут нужно по уму сделать. У меня примерно такая схема родилась

https://pasteboard.co/JKcwhO7.jpg

Идея в следующем подгружаю в пространство master и slaves модуль, он состоит из таких вот блоков для передачи инфы, таких блоков (на картинке изображен один блок) штук 10 всего. Работает примерно так: slave подходит к блоку, берет семафор slave-slave, который запрещает доступ к блоку для других slave (возможно откажусь вовсе от slave-slave семафора и за каждым slave будет закреплен свой блок). Далее берет семафор slave-master, пишет в общую память, освобождает slave-master семафор, подает сингал через fifo master’у о готовности данных для чтения, подключается к fifo для ожидания сигнала о наличии ответа в общей памяти, берет slave-master семафор, читает, уходит. Как вам в целом схема? Можете предложить лучше? Насколько разумно использовать fifo в качестве condition variable? Они весьма тормознутые (shared memory быстрее раз в сто, если не ошибаюсь), возможно там и пробуждение процесса по сигналу из него тоже не на высоте (а куда торопиться, если они и так тормознутые), может можно чем-то заменить?

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