Reaktormønster - Reactor pattern
Reaktoren mønster er en begivenhed håndtering mønster til håndtering tjenesteanmodninger leveres samtidigt til en tjeneste handler med én eller flere input. Servicehandleren demultiplekserer derefter de indgående anmodninger og sender dem synkront til de tilknyttede anmodningshåndterere.
Struktur
- Ressourcer
- Enhver ressource, der kan levere input til eller forbruge output fra systemet.
- Synkron begivenhedsdemultiplexer
- Bruger en begivenhedssløjfe til at blokere for alle ressourcer. Demultiplexeren sender ressourcen til afsenderen, når det er muligt at starte en synkron operation på en ressource uden at blokere ( Eksempel: et synkront opkald til
read()vil blokere, hvis der ikke er data at læse. Demultiplexeren brugerselect()på ressourcen, som spærrer indtil ressource er tilgængelig til læsning. I dette tilfælderead()blokeres et synkront opkald til ikke, og demultiplexeren kan sende ressourcen til afsenderen.) - Afsender
- Håndterer registrering og afregistrering af anmodningshåndterere. Afsender ressourcer fra demultiplexeren til den tilknyttede anmodningshåndterer.
- Anmodningsbehandler
- En applikationsdefineret anmodningshåndterer og dens tilknyttede ressource.
Ejendomme
Alle reaktorsystemer har en-gevind pr. Definition, men kan eksistere i et multitrådet miljø.
Fordele
Reaktormønsteret adskiller applikationsspecifik kode fuldstændigt fra implementeringen af reaktoren, hvilket betyder, at applikationskomponenter kan opdeles i modulære, genanvendelige dele.
Begrænsninger
Reaktormønsteret kan være sværere at debugge end et proceduremønster på grund af den omvendte strøm af kontrol. Ved kun at ringe til anmodningshåndterere synkront begrænser reaktormønsteret maksimal samtidighed, især på symmetrisk multiprocesseringshardware . Reaktormønsterets skalerbarhed er begrænset ikke kun ved at ringe til anmodningshåndterere synkront, men også af demultiplexeren.
Se også
- Proaktormønster (et mønster, der også demultiplexer og sender begivenheder, men asynkront)
- Applikationsserver
- C10k-problem