Выбор решения IPC для приложения, управляемого событиями - PullRequest
4 голосов
/ 06 декабря 2010

В настоящее время я работаю над довольно большим однопоточным, основанным на событиях приложением, разработанным для epoll под Linux и сравнимыми технологиями под другими платформами.В настоящее время, когда мы хотим, чтобы два экземпляра общались, они обычно делают это через сокеты, независимо от того, работают они на одной машине или нет.По соображениям производительности я предполагаю использование какой-либо формы IPC для ускорения связи на одной машине.Теперь мне нужно решить, какой механизм IPC использовать.

Для меня важны следующие факторы:

  • управляемый событиями, без полного изменения - если механизм IPC не работаетДля epoll это не очень хорошо, для меня потрачены месяцы работы
  • быстро - если этот механизм не быстрее сокетов, не стоит тратить время на его реализацию
  • гибкий и (пере)настраивается во время выполнения - я считаю, что это исключает MPI & al
  • многопоточность не требуется.

Я готов использовать разные механизмы для разных платформ, если тольковсе они используют одну и ту же парадигму.Я также готов проникнуть настолько глубоко, насколько это необходимо, в C / C ++ / Obj-C для привязки к платформе.

Любое предложение?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010

Unix розетки.Именованные трубы.FIFO.

Все они имеют одинаковую базовую функциональность - одинаковые межпроцессные коммуникации.Реализации предлагают немного другое поведение.

Все они используют дескрипторы файлов, так что вы можете буквально просто подключить их туда, где раньше был ваш сокет.

2 голосов
/ 06 декабря 2010

действительно, как упомянул skwllsp, сокеты AF_INET оптимизированы для передачи данных на локальном хосте, а скорость и сложность сопоставимы (почти одинаковы?) С fifo, pipe, unix-сокетами (большая часть обработки skbuff пропускается, если пункт назначения тот же хост). мои 2 цента это использовать розетки. таким образом вы не только сохраняете тот же интерфейс для своего механизма IPC, но и успешно используете свой код как для удаленных, так и для локальных сценариев.

0 голосов
/ 09 декабря 2010

Попробуйте Unix SysV IPC. Поддерживает: -

  • очереди сообщений
  • Семафор
  • Общая память

, который может вам помочь.

Эта ссылка может помочь больше: http://www.ibm.com/developerworks/aix/library/au-ipc/index.html

...