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
- 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
Definíció szerint minden Reaktor rendszer egyszálú, de lézethet többszálú rendszerben is.
Előnyök
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
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
Jegyzetek
Források
- 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
További idegen nyelvű irodalom