Wzór reaktora

Wzorzec projektowy reaktora to wzorzec obsługi zdarzeń służący do obsługi żądań usług dostarczanych jednocześnie do obsługi usługi przez jedno lub więcej wejść. Następnie program obsługi usługi demultipleksuje przychodzące żądania i wysyła je synchronicznie do powiązanych programów obsługi żądań.

Struktura

Zasoby
Dowolny zasób, który może dostarczać dane wejściowe lub konsumować dane wyjściowe systemu.
Synchroniczny demultiplekser zdarzeń
Wykorzystuje pętlę zdarzeń do blokowania wszystkich zasobów. Demultiplekser wysyła zasób do dyspozytora, gdy możliwe jest rozpoczęcie synchronicznej operacji na zasobie bez blokowania ( Przykład: synchroniczne wywołanie funkcji read() zostanie zablokowane, jeśli nie ma danych do odczytania. Demultiplekser używa funkcji select() na zasób, który blokuje się, dopóki zasób nie będzie dostępny do odczytu. W tym przypadku synchroniczne wywołanie funkcji read() nie zablokuje, a demultiplekser może wysłać zasób do dyspozytora.)
Dyspozytor
Obsługuje rejestrowanie i wyrejestrowywanie programów obsługi żądań. Wysyła zasoby z demultipleksera do powiązanego programu obsługi żądań.
Program obsługi żą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

Wzorzec 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

Wzór reaktora może być trudniejszy do debugowania niż wzór proceduralny ze względu na odwrócony przepływ sterowania. Ponadto, poprzez synchroniczne wywoływanie tylko programów obsługi żądań, wzorzec reaktora ogranicza maksymalną współbieżność, szczególnie w przypadku symetrycznego sprzętu wieloprocesorowego. Skalowalność wzorca reaktora jest ograniczona nie tylko przez synchroniczne wywoływanie procedur obsługi żądań, ale także przez demultiplekser.

Zobacz też

Linki zewnętrzne