/ Как да настроите комуникацията между два процеса? Linux, контакти

Как да настроите комуникацията между два процеса? Linux, контакти

Имам следната ситуация:

  1. Даймън, който извършва привилегировано действие върху данните, които се съхраняват в паметта.

  2. Многонаделен сървър, който понастоящем работи на около 30 сърца, обработващи заявки на потребители.

Сървърът (1) ще получи заявки от (2),обработва ги един по един и връща отговор. Всяка заявка за (1) никога няма да блокира и ще отнеме само част от микросекундата (1) за обработка, така че ние сме сигурни, че ще получим обратни реакции бързо, освен ако (1) не бъде претоварен от твърде много натоварване.

По същество бих искал да създам ситуациякъдето (1) слуша UNIX домейн socket и (2) пише заявки и чете отговори. Все пак бих искал всяка нишка от (2) да бъде в състояние да чета и пише едновременно. Идеята ми е да имам един UNIX гнездо на нишка за комуникация между (1) и (2) да има (1) блок на epoll_wait на тези модули за обработка на модули един по един. Всяка нишка на (2) би прочела и записвала самостоятелно в гнездото си.

Проблемът, който виждам с този подход, е товаАз не може лесно динамично да се увеличи броят на нишките на (2). Има ли начин да се постигне това по начин, който е гъвкав по отношение на конфигурация по време на работа? Предполагам, че един подход ще бъде да има голям брой гнезда и thread on (2) би избрал един шкаф случайно, да мутекс на него, да напише заявка и да блокира чакането на отговор, след което да освободи mutex, след като получи отговор обратно от (1).

Всеки има по-добри идеи?

Отговори:

0 за отговор № 1

Бих предложила жизнеспособна възможност да отидас вашето собствено предложение и да имате всяка нишка да създаде своя собствена гнездо за комуникация с демона. Можете да използвате стрийминг (tcp) контакти, които лесно могат да решат проблема ви с добавянето на повече нишки динамично:

  1. Демонът слуша на определено пристанище, използвайки socket(), bind() и listen(), Гнездото, което се слуша, първоначално е единственото нещо в него epoll_wait комплект.
  2. Клиентските нишки се свързват с този порт с connect()
  3. Демон сървърът приема (с accept()) входящата връзка за създаване на нов контакт, който се добавя към него epoll_wait с помощта на epoll_ctl().

Горната процедура може да се използва, за да добавите произволно колкото се може повече гнезда, колкото имате нужда, всички с един epoll_wait откъм страната на демоните.