Reactor programtervezési minta
A Reactor tervezési minta olyan eredmény kezelési minta, mely kezeli a szolgáltatáskezelőnek egy vagy több input által egymással egyidejűleg küldött szolgáltatási kéréseket. A szolgáltatáskezelő ekkor visszafejti a bejövő kéréseket és párhuzamosan továbbítja azokat a megfelelő kéréskezelőknek.[1]
Felépítés
[szerkesztés]- Források (resources): bármely forrás, mely a rendszer számára inputot képes előállítani vagy a rendszerből képes outputot előállítani.
- Párhuzamos Esemény Visszafejtő (synchrous event demultiplexer): Esemény loop-ot használ, mellyel blokkolja a forrásokat. Amikor lehetőség van blokkolás nélküli forrással párhuzamos tevékenységet végezni, elküldi a forrást a Továbbítónak.
- Továbbító (dispatcher): Kéréskezelők regisztrálása és deregisztrálása. A Visszafejtőtől továbbítja a forrásokat a megfelelő Kéréskezelőnek.
- Kéréskezelő (request handler): Az alkalmazás által meghatározott kéréskezelő és a hozzá tartozó források.
Tulajdonságok
[szerkesztés]Definíció szerint minden Reaktor rendszer egyszálú, de lézethet többszálú rendszerben is.
Előnyök
[szerkesztés]A Reactor tervezési minta teljes mértékben elszigeteli az alkalmazás-specifikus kódot a Reactor implementációjától, ami azt jelenti, hogy az alkalmazás összetevőit moduláris, újrahasznosítható részekre oszthatjuk. Továbbá, a kéréskezelők párhuzamos hívásának köszönhetően, a Reactor minta úgy teszi lehetővé az egyszerű konkurenciát, hogy közben nem teszi több szálas bonyolultságúvá a rendszert
Korlátok
[szerkesztés]A fordított irányú vezérlésnek köszönhetően a Reactor mintát nehezebb debuggolni, mint egy procedurális mintát.[2] Továbbá, az által, hogy párhuzamosan hívja a kéréskezelőket, a reaktor minta korlátozza a maximális konkurenciát, különösen a szimmetrikus többprocesszoros gépeken. A reaktor minta skálázhatóságát korlátozza, hogy a kéréskezelőket párhuzamosan hívja, illetve korlátozza a visszafejtő is.[3]
Kapcsolódó szócikkek
[szerkesztés]Jegyzetek
[szerkesztés]- ↑ Schmidt, Douglas et al. Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects. Volume 2. Wiley, 2000.
- ↑ Schmidt, Douglas C., An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events, <http://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf>
- ↑ Kegel, Dan, The C10K problem, <http://www.kegel.com/c10k.html#nb.select>. Hozzáférés ideje: 2007-07-28
Források
[szerkesztés]- Douglas Schmidt: Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects. Volume 2. Wiley, 2000.
- Douglas C. Schmidt: An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events
- Reactor pattern