Projektuję aplikację C ++, która składa się zw dużej mierze niezależne wtyczki lub moduły, które od czasu do czasu produkują wyniki przydatne dla innych wtyczek. Na przykład moduł analizy zawiera przydatne dane i przesyła je do modułów akcji. Każdy moduł będzie działał we własnym wątku; w ten sposób moduły analityczne mogą kontynuować gromadzenie danych, podczas gdy moduły działania obsługują dane z taką szybkością, jaką potrafią.
Szukam odpowiedniej wiadomości przekazującej architekturę / wzór projektu. Ta wątek stackoverflow podaje pewne sugestie, ale nie jestem pewien, czy zwykły interfejs będzie działał w środowisku wielowątkowym.
Myślałem o jakimś kanalew oparciu o architekturę, w której każdy moduł nadaje coś na kanale i który moduł jest nim zainteresowany - słucha. Jeśli istnieje kilka gotowych bibliotek na licencji liberalnej - tym lepiej.
Odpowiedzi:
2 dla odpowiedzi № 1Używam ACE (Adaptive Communication Environment) do zarządzania wątkami, komunikacji TCP / UDP, relacji mutex i programowania.
ACE to wysoce przenośny zbiór wywołań wzorców rdzenia platformy. Najlepszy ze wszystkich jest bezpłatny, open source i obecnie jest aktywnie rozwijany.
http://www.cs.wustl.edu/~schmidt/ACE.html
Do Twojej aplikacji polecam szukaniew szczególności w klasie "ACE_Task_Base", aby zapewnić wielowątkowość, oraz "ACE_Reactor", aby zarejestrować wszystkie procedury obsługi dla asynchronicznej architektury wywołań zwrotnych.
1 dla odpowiedzi nr 2
Być może zainteresuje Cię spojrzenie ZeroMQ biblioteka działająca jak struktura współbieżnościrównież. Korzystając z tej biblioteki, twoje komponenty będą komunikować się ze sobą, wysyłając wiadomości do nazwanych gniazd ZeroMQ. Istnieje wiele typów gniazd (TCP, IPC, inproc) i kilka wzorców do wysyłania żądań-odpowiedzi i publikowania-subskrypcji.