Schema del reattore - Reactor pattern
Il modello di progettazione del reattore è un modello di gestione degli eventi per la gestione delle richieste di servizio consegnate contemporaneamente a un gestore di servizi da uno o più input. Il gestore del servizio quindi demultiplex le richieste in arrivo e le invia in modo sincrono ai gestori delle richieste associati.
Struttura
- Risorse
- Qualsiasi risorsa in grado di fornire input o consumare output dal sistema.
- Demultiplexer ad eventi sincroni
- Utilizza un ciclo di eventi per bloccare tutte le risorse. Il demultiplexer invia la risorsa al dispatcher quando è possibile avviare un'operazione sincrona su una risorsa senza bloccarla ( Esempio: una chiamata sincrona a
read()si bloccherà se non ci sono dati da leggere. Il demultiplexer usaselect()sulla risorsa, che si blocca fino al la risorsa è disponibile per la lettura. In questo caso, una chiamata sincrona aread()non verrà bloccata e il demultiplatore può inviare la risorsa al dispatcher.) - Dispatcher
- Gestisce la registrazione e l'annullamento della registrazione dei gestori delle richieste. Invia le risorse dal demultiplexer al gestore delle richieste associato.
- Gestore richieste
- Un gestore di richieste definito dall'applicazione e la relativa risorsa associata.
Proprietà
Tutti i sistemi di reattori sono a thread singolo per definizione, ma possono esistere in un ambiente multithread .
Benefici
Il modello del reattore separa completamente il codice specifico dell'applicazione dall'implementazione del reattore, il che significa che i componenti dell'applicazione possono essere suddivisi in parti modulari e riutilizzabili.
Limitazioni
Il modello del reattore può essere più difficile da eseguire il debug di un modello procedurale a causa del flusso di controllo invertito. Inoltre, chiamando solo i gestori delle richieste in modo sincrono, il pattern del reattore limita la massima concorrenza, specialmente su hardware multiprocessing simmetrico . La scalabilità del pattern del reattore è limitata non solo chiamando i gestori di richiesta in modo sincrono, ma anche dal demultiplexer.
Guarda anche
- Pattern Proactor (un pattern che demultipla e invia eventi, ma in modo asincrono)
- Server delle applicazioni
- Problema C10k