Wzór reaktora - Reactor pattern

Wzorzec projektowy reaktora to wzorzec obsługi zdarzeń służący do obsługi żądań usług dostarczanych współbieżnie do programu obsługi usług przez co najmniej jedno wejście. Następnie program obsługi usług demultipleksuje przychodzące żądania i przesyła je synchronicznie do powiązanych programów obsługi żądań.

Struktura

Zasoby
Każdy zasób, który może dostarczać dane wejściowe do systemu lub wykorzystywać dane wyjściowe z systemu.
Demultiplekser zdarzeń synchronicznych
Używa pętli zdarzeń do blokowania wszystkich zasobów. Demultiplekser wysyła zasób do dyspozytora, gdy możliwe jest rozpoczęcie operacji synchronicznej na zasobie bez blokowania ( przykład: wywołanie synchroniczne do read() zostanie zablokowane, jeśli nie ma danych do odczytania. Demultiplekser używa select() zasobu, który blokuje do czasu zasób jest dostępny do odczytu. W takim przypadku wywołanie synchroniczne read() nie zostanie zablokowane, a demultiplekser może wysłać zasób do dyspozytora).
Dyspozytor
Obsługuje rejestrację i wyrejestrowanie osób obsługujących wnioski. Wysyła zasoby z demultipleksera do skojarzonej obsługi żądań.
Obsługa żądań
Program obsługi żądań zdefiniowany przez aplikację i powiązany z nim zasób.

Nieruchomości

Wszystkie systemy reaktorów są z definicji jednowątkowe, ale mogą istnieć w środowisku wielowątkowym .

Korzyści

Wzór reaktora całkowicie oddziela kod specyficzny dla aplikacji od implementacji reaktora, co oznacza, że ​​komponenty aplikacji można podzielić na modułowe części wielokrotnego użytku.

Ograniczenia

Wzorzec reaktora może być trudniejszy do debugowania niż wzorzec proceduralny z powodu odwróconego przepływu sterowania. Ponadto, przez synchroniczne wywoływanie programów obsługi żądań, wzorzec reaktora ogranicza maksymalną współbieżność, szczególnie w przypadku symetrycznego sprzętu obsługującego wiele procesów. Skalowalność wzorca reaktora jest ograniczona nie tylko przez synchroniczne wywoływanie procedur obsługi żądań, ale także przez demultiplekser.

Zobacz też

Bibliografia

Linki zewnętrzne