2. szoftarch - minták

0.0(0)
Studied by 0 people
call kaiCall Kai
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
GameKnowt Play
Card Sorting

1/7

encourage image

There's no tags or description

Looks like no tags are added yet.

Last updated 9:45 PM on 12/3/25
Name
Mastery
Learn
Test
Matching
Spaced
Call with Kai
Chat

No analytics yet

Send a link to your students to track their progress

8 Terms

1
New cards

Component Configurator**

A.
Edző, Coach

B.
komponenseket futásidőben kell csatlakoztatni, cserélni vagy leállítani, anélkül hogy az alkalmazást újra kellene fordítani vagy indítani

C.
• komponensek funkcionalitása vagy teljesítménye futás közben módosításra szorulhat
• közös adminisztrációs feladatok

D.
• Válaszd szét a komponensek interfészét és implementációját.

• Biztosítsd, hogy minden komponens rendelkezzen egységes konfigurációs/interfész felülettel.

• Legyen egy központi vezérlő (Component Configurator), amely:

  • betölti / inicializálja

  • átmenetileg felfüggeszti

  • leállítja / eltávolítja
    a komponenseket futásidőben.

E.
• Komponens – egységes interfész konfigurációra.

• Konkrét komponensek – tényleges megvalósítások.

• Komponenstár – nyilvántartja a betöltött komponenseket.

• Komponensbeállító (Coach) – betölt, felfüggeszt, leállít.

F.
• Csatolás: Coach betölti és inicializálja a komponenst, bekerül a komponenstárba.

• Használat: A komponens fut, feladatokat végez; a Coach felfüggesztheti/újraindíthatja.

• Leállítás: A komponens felszabadítja erőforrásait, a Coach eltávolítja és kiunloadolja.

G.
• Interfész–implementáció leválasztása.

• Dinamikus betöltés (pl. shared library, DLL, plugin).

• Erőforrások korrekt felszabadítása.

• Verziókezelés, kompatibilitás

H.
• Windows Service Control Manager (SCM)

• Java Applets (dinamikus betöltés)

• Bármilyen plugin-alapú rendszer

I:

Előnyök

Hátrányok

Egységes hozzáférés

Biztonsági kockázatok

Központi adminisztráció

Teljesítmény-overhead

Dinamikus konfiguráció

Bonyolult megvalósítás

Modularitás



<p>A.<br>Edző, Coach</p><p>B.<br><strong>komponenseket futásidőben kell csatlakoztatni, cserélni vagy leállítani</strong>, anélkül hogy az alkalmazást újra kellene fordítani vagy indítani</p><p>C.<br>• komponensek funkcionalitása vagy teljesítménye futás közben módosításra szorulhat<br>• <strong>közös adminisztrációs feladatok</strong></p><p>D.<br>• <strong>Válaszd szét</strong> a komponensek <em>interfészét</em> és <em>implementációját</em>.</p><p>• Biztosítsd, hogy minden komponens rendelkezzen <strong>egységes konfigurációs/interfész felülettel</strong>.</p><p>• Legyen egy <strong>központi vezérlő</strong> (Component Configurator), amely:</p><ul><li><p>betölti / inicializálja</p></li><li><p>átmenetileg felfüggeszti</p></li><li><p>leállítja / eltávolítja<br>a komponenseket futásidőben.</p></li></ul><p>E.<br>• <strong>Komponens</strong> – egységes interfész konfigurációra.</p><p>• <strong>Konkrét komponensek</strong> – tényleges megvalósítások.</p><p>• <strong>Komponenstár</strong> – nyilvántartja a betöltött komponenseket.</p><p>• <strong>Komponensbeállító (Coach)</strong> – betölt, felfüggeszt, leállít.</p><p>F.<br>• <strong>Csatolás</strong>: Coach betölti és inicializálja a komponenst, bekerül a komponenstárba.</p><p>• <strong>Használat</strong>: A komponens fut, feladatokat végez; a Coach felfüggesztheti/újraindíthatja.</p><p>• <strong>Leállítás</strong>: A komponens felszabadítja erőforrásait, a Coach eltávolítja és kiunloadolja.</p><p>G.<br>• Interfész–implementáció leválasztása.</p><p>• Dinamikus betöltés (pl. shared library, DLL, plugin).</p><p>• Erőforrások korrekt felszabadítása.</p><p>• Verziókezelés, kompatibilitás</p><p>H.<br>• <strong>Windows Service Control Manager (SCM)</strong></p><p>• <strong>Java Applets</strong> (dinamikus betöltés)</p><p>• Bármilyen plugin-alapú rendszer</p><p>I:</p><table style="min-width: 50px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong>Előnyök</strong></p></th><th colspan="1" rowspan="1"><p><strong>Hátrányok</strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>Egységes hozzáférés</p></td><td colspan="1" rowspan="1"><p>Biztonsági kockázatok</p></td></tr><tr><td colspan="1" rowspan="1"><p>Központi adminisztráció</p></td><td colspan="1" rowspan="1"><p>Teljesítmény-overhead</p></td></tr><tr><td colspan="1" rowspan="1"><p>Dinamikus konfiguráció</p></td><td colspan="1" rowspan="1"><p>Bonyolult megvalósítás</p></td></tr><tr><td colspan="1" rowspan="1"><p>Modularitás</p></td><td colspan="1" rowspan="1"><p></p></td></tr></tbody></table><p></p>
2
New cards

Interceptor**

A.
Címváltozás, levéltovábbítás (Interceptor)

B.
Átlátszó módon szeretnénk új szolgáltatásokat kapcsolni egy keretrendszer belső eseményeihez, anélkül hogy a keretrendszert módosítani kellene.

C.
• Új szolgáltatások beszúrása a keretrendszer módosítása nélkül
• Ne változzon a keretrendszer eddigi működése
• A keretrendszer legyen monitorozható
• Belső eseményekhez szeretnénk logikát kötni

D.
• Definiáljunk beavatkozási pontokat (interception points).
• Minden ponthoz tartozzon egy interceptor interfész (callback metódusokkal).
• Legyen egy dispatcher, amelyhez kliensek regisztrálnak interceptorokat.
• Esemény bekövetkezésekor a dispatcher sorban meghívja a regisztrált interceptorokat.
• Kontextusobjektum biztosít hozzáférést a keretrendszer belső állapotához, ha módosítás szükséges.

E.
• Keretrendszer
• Interceptor
• Konkrét Interceptor
• Dispatcher
• Kontextusobjektum
• Alkalmazás (ami regisztrál)

F.
• Az alkalmazás létrehoz egy konkrét interceptor objektumot.
• Regisztrálja azt a megfelelő dispatcherhez.
• A keretrendszer eseményt észlel → létrehozza a megfelelő kontextusobjektumot.
• A dispatcher meghívja sorban az összes kapcsolódó interceptor callbackjét.
• A keretrendszer folytatja normál működését.

G.
• Ügyelni kell a kontextus biztosítására és határainak meghatározására
• Több interceptor sorrendjének kezelése
• Hibakezelés: egy interceptor ne akassza meg a rendszert
• Teljesítményre gyakorolt overhead minimalizálása

H.
• Komponens alapú alkalmazásszerverek
• CORBA, COM
• Böngészők (pl. Angular hibakezelés)
• Middleware rendszerek
I:

Előnyök

Hátrányok

Kiterjeszthetőség, rugalmasság

Komplex tervezés

Monitorozhatóság

Egy hibás interceptor megakaszthatja a rendszert

Újrafelhasználhatóság

Teljesítmény-overhead

Aspektus-alapú megközelítés támogatása



<p>A.<br>Címváltozás, levéltovábbítás (Interceptor)</p><p>B.<br>Átlátszó módon szeretnénk új szolgáltatásokat kapcsolni egy keretrendszer belső eseményeihez, anélkül hogy a keretrendszert módosítani kellene.</p><p>C.<br>• Új szolgáltatások beszúrása a keretrendszer módosítása nélkül<br>• Ne változzon a keretrendszer eddigi működése<br>• A keretrendszer legyen monitorozható<br>• Belső eseményekhez szeretnénk logikát kötni</p><p>D.<br>• Definiáljunk <strong>beavatkozási pontokat</strong> (interception points).<br>• Minden ponthoz tartozzon egy <strong>interceptor interfész</strong> (callback metódusokkal).<br>• Legyen egy <strong>dispatcher</strong>, amelyhez kliensek regisztrálnak interceptorokat.<br>• Esemény bekövetkezésekor a dispatcher <strong>sorban meghívja a regisztrált interceptorokat</strong>.<br>• Kontextusobjektum biztosít hozzáférést a keretrendszer belső állapotához, ha módosítás szükséges.</p><p>E.<br>• Keretrendszer<br>• Interceptor<br>• Konkrét Interceptor<br>• Dispatcher<br>• Kontextusobjektum<br>• Alkalmazás (ami regisztrál)</p><p>F.<br>• Az alkalmazás létrehoz egy konkrét interceptor objektumot.<br>• Regisztrálja azt a megfelelő dispatcherhez.<br>• A keretrendszer eseményt észlel → létrehozza a megfelelő kontextusobjektumot.<br>• A dispatcher meghívja sorban az összes kapcsolódó interceptor callbackjét.<br>• A keretrendszer folytatja normál működését.</p><p>G.<br>• Ügyelni kell a kontextus biztosítására és határainak meghatározására<br>• Több interceptor sorrendjének kezelése<br>• Hibakezelés: egy interceptor ne akassza meg a rendszert<br>• Teljesítményre gyakorolt overhead minimalizálása</p><p>H.<br>• Komponens alapú alkalmazásszerverek<br>• CORBA, COM<br>• Böngészők (pl. Angular hibakezelés)<br>• Middleware rendszerek<br>I:<br></p><table style="min-width: 50px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong>Előnyök</strong></p></th><th colspan="1" rowspan="1"><p><strong>Hátrányok</strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>Kiterjeszthetőség, rugalmasság</p></td><td colspan="1" rowspan="1"><p>Komplex tervezés</p></td></tr><tr><td colspan="1" rowspan="1"><p>Monitorozhatóság</p></td><td colspan="1" rowspan="1"><p>Egy hibás interceptor megakaszthatja a rendszert</p></td></tr><tr><td colspan="1" rowspan="1"><p>Újrafelhasználhatóság</p></td><td colspan="1" rowspan="1"><p>Teljesítmény-overhead</p></td></tr><tr><td colspan="1" rowspan="1"><p>Aspektus-alapú megközelítés támogatása</p></td><td colspan="1" rowspan="1"><p></p></td></tr></tbody></table><p></p>
3
New cards

Extension Interface

A.
Extension Interface

B.
Olyan környezetekben hasznos, ahol a komponensek interfészei idővel fejlődnek, de a kliensek továbbra is működniük kell változtatás nélkül.

C.
• A komponensek interfészei változhatnak, de a klienskód ne törjön el
• Új funkciók hozzáadása ne bonyolítsa túl a meglévő interfészeket
• Interfész–implementáció különválasztása szükséges
• Távoli és lokális hívások egységesen történjenek

D.
• A funkciókat kiegészítő interfészekbe szervezzük (mindegyik egy logikai funkcióhalmaz).
• Ne módosítsuk a meglévő interfészeket → inkább új extension interface-t adjunk hozzá.
• A komponensek eléréséhez legyen egy component factory, amely:

  • létrehozza a komponenst

  • visszaad egy root interface-t, amelyen keresztül lekérhetők a további extension interfészek
    • A kliens mindig interfészeket használjon, ne az implementációt.

E.
• Komponens
• Kiegészítő (extension) interfészek
• Komponens gyár (Component Factory)
• Gyökér interfész (root interface)
• Kliens alkalmazás

F.
• A kliens a komponens gyár segítségével példányt kér
• A gyökér interfészen keresztül lekérdezi a kívánt extension interface-t
• Az extension interfész metódusain keresztül használja a komponens új funkcióit
• A komponens implementációt bármikor lecserélhetjük a kliens újrafordítása nélkül

G.
• Dönteni kell a stabil interfészstruktúrákról
• Domain-specifikus komponensmodell kialakítása
• Root interface tervezése
• Extension interfészek lekérdezésének mechanizmusa
• Factory felelősségeinek meghatározása

H.
• Microsoft COM / COM+
• CORBA 3
• EJB
• OpenDoc

I:

Előnyök

Hátrányok

Kiterjeszthetőség

Magasabb implementációs költség

Jó szemantikus szétválasztás

Teljesítmény-overhead

Polimorf megközelítés

Kliens komplexitása nő

Interfész aggregáció és delegáció



<p>A.<br>Extension Interface</p><p>B.<br>Olyan környezetekben hasznos, ahol a komponensek <strong>interfészei idővel fejlődnek</strong>, de a kliensek továbbra is működniük kell változtatás nélkül.</p><p>C.<br>• A komponensek interfészei változhatnak, de a klienskód ne törjön el<br>• Új funkciók hozzáadása ne bonyolítsa túl a meglévő interfészeket<br>• Interfész–implementáció különválasztása szükséges<br>• Távoli és lokális hívások egységesen történjenek</p><p>D.<br>• A funkciókat <strong>kiegészítő interfészekbe</strong> szervezzük (mindegyik egy logikai funkcióhalmaz).<br>• Ne módosítsuk a meglévő interfészeket → inkább új extension interface-t adjunk hozzá.<br>• A komponensek eléréséhez legyen egy <strong>component factory</strong>, amely:</p><ul><li><p>létrehozza a komponenst</p></li><li><p>visszaad egy <strong>root interface-t</strong>, amelyen keresztül lekérhetők a további extension interfészek<br>• A kliens mindig interfészeket használjon, ne az implementációt.</p></li></ul><p>E.<br>• Komponens<br>• Kiegészítő (extension) interfészek<br>• Komponens gyár (Component Factory)<br>• Gyökér interfész (root interface)<br>• Kliens alkalmazás</p><p>F.<br>• A kliens a komponens gyár segítségével példányt kér<br>• A gyökér interfészen keresztül lekérdezi a kívánt extension interface-t<br>• Az extension interfész metódusain keresztül használja a komponens új funkcióit<br>• A komponens implementációt bármikor lecserélhetjük a kliens újrafordítása nélkül</p><p>G.<br>• Dönteni kell a stabil interfészstruktúrákról<br>• Domain-specifikus komponensmodell kialakítása<br>• Root interface tervezése<br>• Extension interfészek lekérdezésének mechanizmusa<br>• Factory felelősségeinek meghatározása</p><p>H.<br>• Microsoft COM / COM+<br>• CORBA 3<br>• EJB<br>• OpenDoc</p><p>I:<br></p><table style="min-width: 50px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong>Előnyök</strong></p></th><th colspan="1" rowspan="1"><p><strong>Hátrányok</strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>Kiterjeszthetőség</p></td><td colspan="1" rowspan="1"><p>Magasabb implementációs költség</p></td></tr><tr><td colspan="1" rowspan="1"><p>Jó szemantikus szétválasztás</p></td><td colspan="1" rowspan="1"><p>Teljesítmény-overhead</p></td></tr><tr><td colspan="1" rowspan="1"><p>Polimorf megközelítés</p></td><td colspan="1" rowspan="1"><p>Kliens komplexitása nő</p></td></tr><tr><td colspan="1" rowspan="1"><p>Interfész aggregáció és delegáció</p></td><td colspan="1" rowspan="1"><p></p></td></tr></tbody></table><p></p>
4
New cards

Reactor**

A.
Dispatcher, Notifier, „Telefonközpont” (Reactor)

B.
Több eseményt kell egyszerre kezelni szinkron, soros módon, hatékony és skálázható eseményvezérelt rendszerben.

C.
• Növelni kell a skálázhatóságot
• Csökkenteni kell a késleltetést
• Minimalizálni kell a szinkronizációt
• Események érkeznek párhuzamos forrásoktól → megfelelően szét kell osztani őket

D.
• Válasszuk szét a jelző események detektálását és a feldolgozásukat
• Minden eseménytípushoz legyen event handler
• Egy központi Reactor regisztrálja az eseménykezelőket
• A Reactor egy szinkron eseményelosztót (SED) használ az események várakoztatására
• Esemény érkezésekor a Reactor meghívja az adott eseményhez tartozó kezelőt

E.
• Reactor – központi dispatcher
• Synchronous Event Demultiplexer (SED)
• Event Handle – eseményleíró
• Event Handler – absztrakt kezelő
• Concrete Event Handler – konkrét kezelők implementációi

F.
• Eseménykezelők regisztrálják magukat a Reactorhoz
• A Reactor elindítja a handle_events() ciklust
• A SED blokkolva vár eseményekre
• Esemény érkezik → SED visszatér → Reactor azonosítja a megfelelő event handlert
• Meghívja a handler handle_event() műveletét
• Handler kiszolgálja az eseményt és visszatér

G.
• Event Handler interfész tervezése
• A Reactor interfész és eseményelosztási stratégia definiálása
• Megfelelő SED mechanizmus kiválasztása (pl. select, poll, epoll, IOCP)
• Döntés arról, hány Reactor instance legyen (egy vagy több)

H.
• Windows eseménykezelési rendszer
• X Windows eseménykezelés
• CORBA ORB Core
• Telekom rendszerek (Call Management)

I:

Előnyök

Hátrányok

Modularitás, újrafelhasználhatóság

Szinkron várakozás miatti blokkolás

Hordozhatóság

Nehézkes debuggolás

Kontrollált konkurenciakezelés


Egyszerű programozási modell



<p>A.<br>Dispatcher, Notifier, „Telefonközpont” (Reactor)</p><p>B.<br>Több eseményt kell egyszerre kezelni <strong>szinkron</strong>, <strong>soros</strong> módon, hatékony és skálázható eseményvezérelt rendszerben.</p><p>C.<br>• Növelni kell a skálázhatóságot<br>• Csökkenteni kell a késleltetést<br>• Minimalizálni kell a szinkronizációt<br>• Események érkeznek párhuzamos forrásoktól → megfelelően szét kell osztani őket</p><p>D.<br>• Válasszuk szét a jelző események detektálását és a feldolgozásukat<br>• Minden eseménytípushoz legyen <strong>event handler</strong><br>• Egy központi <strong>Reactor</strong> regisztrálja az eseménykezelőket<br>• A Reactor egy <strong>szinkron eseményelosztót (SED)</strong> használ az események várakoztatására<br>• Esemény érkezésekor a Reactor meghívja az adott eseményhez tartozó kezelőt</p><p>E.<br>• Reactor – központi dispatcher<br>• Synchronous Event Demultiplexer (SED)<br>• Event Handle – eseményleíró<br>• Event Handler – absztrakt kezelő<br>• Concrete Event Handler – konkrét kezelők implementációi</p><p>F.<br>• Eseménykezelők regisztrálják magukat a Reactorhoz<br>• A Reactor elindítja a handle_events() ciklust<br>• A SED blokkolva vár eseményekre<br>• Esemény érkezik → SED visszatér → Reactor azonosítja a megfelelő event handlert<br>• Meghívja a handler handle_event() műveletét<br>• Handler kiszolgálja az eseményt és visszatér</p><p>G.<br>• Event Handler interfész tervezése<br>• A Reactor interfész és eseményelosztási stratégia definiálása<br>• Megfelelő SED mechanizmus kiválasztása (pl. select, poll, epoll, IOCP)<br>• Döntés arról, hány Reactor instance legyen (egy vagy több)</p><p>H.<br>• Windows eseménykezelési rendszer<br>• X Windows eseménykezelés<br>• CORBA ORB Core<br>• Telekom rendszerek (Call Management)</p><p>I:<br></p><table style="min-width: 50px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong>Előnyök</strong></p></th><th colspan="1" rowspan="1"><p><strong>Hátrányok</strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>Modularitás, újrafelhasználhatóság</p></td><td colspan="1" rowspan="1"><p>Szinkron várakozás miatti blokkolás</p></td></tr><tr><td colspan="1" rowspan="1"><p>Hordozhatóság</p></td><td colspan="1" rowspan="1"><p>Nehézkes debuggolás</p></td></tr><tr><td colspan="1" rowspan="1"><p>Kontrollált konkurenciakezelés</p></td><td colspan="1" rowspan="1"><p></p></td></tr><tr><td colspan="1" rowspan="1"><p>Egyszerű programozási modell</p></td><td colspan="1" rowspan="1"><p></p></td></tr></tbody></table><p></p>
5
New cards

ACT** - Asynchronous Completion Token

A.
Active Demultiplexing, „Magic Cookie” (ACT)

B.
Aszinkron műveletekhez tartozó azonosítási token, amely összeköti a kezdeményezett műveletet a completion handlerrel.

C.
• Hogyan azonosítsuk gyorsan és egyszerűen, mely completion handler tartozik egy befejeződött aszinkron művelethez?
• Hogyan csökkentsük a kommunikációs overheadet?

D.
• Minden aszinkron híváshoz létrehozunk egy ACT objektumot, amely:
– azonosítja a műveletet
– referencia a hozzá tartozó completion handlerre
• Az ACT a befejeződéskor a completion eventtel együtt visszatér → így egyszerű a dispatching
• Az ACT lehet pointer, index, objektum, stb.
• A Proactor ennek alapján tudja, mely completion handlert kell meghívni

E.
• Service – aszinkron művelet szolgáltatója
• Initiator – művelet indítója
• Completion Handler – eredmény feldolgozója
• ACT – azonosító token

F.
• Initiator hívja a Service-t → ACT jön létre
• ACT hozzárendelődik a completion handlerhez
• A művelet befejeződik → completion event + ACT visszakerül
• Completion handler a handle_event() metódusában feldolgozza az eredményt

G.
• ACT reprezentáció: pointer / objektumreferencia / index
• ACT tárolása: implicit (OS kezeli) vagy explicit (alkalmazás tárolja)
• ACT használata callbackeken vagy sor alapú feldolgozáson keresztül
• Memóriakezelés kritikus (szivárgás veszélye)

H.
• HTTP cookie-k
• Windows, POSIX rendszerek
• CORBA demultiplexing

I:

Előnyök

Hátrányok

Egyszerűbb adatstruktúra a kezdeményezőnél

Biztonsági kérdések

Alacsony tárigény

Memóriaszivárgás veszélye

Rugalmasság


A klienseket nem befolyásolja a szerver működése



<p>A.<br>Active Demultiplexing, „Magic Cookie” (ACT)</p><p>B.<br>Aszinkron műveletekhez tartozó <strong>azonosítási token</strong>, amely összeköti a kezdeményezett műveletet a completion handlerrel.</p><p>C.<br>• Hogyan azonosítsuk gyorsan és egyszerűen, mely completion handler tartozik egy befejeződött aszinkron művelethez?<br>• Hogyan csökkentsük a kommunikációs overheadet?</p><p>D.<br>• Minden aszinkron híváshoz létrehozunk egy <strong>ACT objektumot</strong>, amely:<br>– azonosítja a műveletet<br>– referencia a hozzá tartozó completion handlerre<br>• Az ACT a befejeződéskor a completion eventtel együtt visszatér → így egyszerű a dispatching<br>• Az ACT lehet pointer, index, objektum, stb.<br>• A Proactor ennek alapján tudja, mely completion handlert kell meghívni</p><p>E.<br>• Service – aszinkron művelet szolgáltatója<br>• Initiator – művelet indítója<br>• Completion Handler – eredmény feldolgozója<br>• ACT – azonosító token</p><p>F.<br>• Initiator hívja a Service-t → ACT jön létre<br>• ACT hozzárendelődik a completion handlerhez<br>• A művelet befejeződik → completion event + ACT visszakerül<br>• Completion handler a handle_event() metódusában feldolgozza az eredményt</p><p>G.<br>• ACT reprezentáció: pointer / objektumreferencia / index<br>• ACT tárolása: implicit (OS kezeli) vagy explicit (alkalmazás tárolja)<br>• ACT használata callbackeken vagy sor alapú feldolgozáson keresztül<br>• Memóriakezelés kritikus (szivárgás veszélye)</p><p>H.<br>• HTTP cookie-k<br>• Windows, POSIX rendszerek<br>• CORBA demultiplexing</p><p>I:<br></p><table style="min-width: 50px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong>Előnyök</strong></p></th><th colspan="1" rowspan="1"><p><strong>Hátrányok</strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>Egyszerűbb adatstruktúra a kezdeményezőnél</p></td><td colspan="1" rowspan="1"><p>Biztonsági kérdések</p></td></tr><tr><td colspan="1" rowspan="1"><p>Alacsony tárigény</p></td><td colspan="1" rowspan="1"><p>Memóriaszivárgás veszélye</p></td></tr><tr><td colspan="1" rowspan="1"><p>Rugalmasság</p></td><td colspan="1" rowspan="1"><p></p></td></tr><tr><td colspan="1" rowspan="1"><p>A klienseket nem befolyásolja a szerver működése</p></td><td colspan="1" rowspan="1"><p></p></td></tr></tbody></table><p></p>
6
New cards

Acceptor-Connector**

A.
„Manager–Secretary” (Acceptor–Connector)

B.
Olyan rendszerekben használatos, ahol több szolgáltatási csomópont van, és el kell választani a kapcsolatfelépítés feladatát a szolgáltatás végrehajtásától.

C.
• Szolgáltatási csomópontok tehermentesítése
• Bővíthetőség biztosítása
• Kapcsolatfelépítési késleltetés minimalizálása
• Sok párhuzamos kapcsolat hatékony kezelése

D.
• A kapcsolatfelvételt külön komponensek végzik:

  • Acceptor: passzív, várja a bejövő kapcsolatokat

  • Connector: aktív, létrehozza a kapcsolatot
    • A szolgáltatás logikáját külön Service Handler valósítja meg
    • A kapcsolat létrejötte után a Service Handlert a Dispatcher regisztrálja és kezeli
    • A kapcsolat építés és az adatfeldolgozás fizikailag és logikailag különválik

E.
• Acceptor
• Concrete Acceptor
• Connector
• Concrete Connector
• Service Handler
• Concrete Service Handler
• Dispatcher – központi elosztó
• Transport Handle – kapcsolatot leíró erőforrás

F.
• Connector kapcsolatot kezdeményez → Acceptor fogadja
• A kapcsolat felépülésekor Service Handler példány születik
• A Dispatcher regisztrálja a Service Handlert
• A kezelési ciklus során a Dispatcher a megfelelő Service Handlerre bízza a beérkező eseményt
• A feldolgozás után a Handler visszakerül vagy megszűnik

G.
• Dispatcher implementációjához gyakran kombinálják Reactor vagy Proactor mintával
• Hibakezelés és időzítések fontosak
• Külön thread modellek kombinálása lehetséges

H.
• UNIX Network Superservers (inetd)
• Web böngészők kapcsolati rétege
• CORBA ORB rendszerek
• Nagy terhelésű szerver alkalmazások

I:

Előnyök

Hátrányok

Hordozhatóság, újrafelhasználhatóság

Többlet komplexitás

Hatékony kapcsolatkezelés

Single point of failure lehet a Dispatcher

Robusztusság

Dedikált komponensek szükségesek

Könnyű bővíthetőség



<p>A.<br>„Manager–Secretary” (Acceptor–Connector)</p><p>B.<br>Olyan rendszerekben használatos, ahol <strong>több szolgáltatási csomópont</strong> van, és el kell választani a <strong>kapcsolatfelépítés</strong> feladatát a <strong>szolgáltatás végrehajtásától</strong>.</p><p>C.<br>• Szolgáltatási csomópontok tehermentesítése<br>• Bővíthetőség biztosítása<br>• Kapcsolatfelépítési késleltetés minimalizálása<br>• Sok párhuzamos kapcsolat hatékony kezelése</p><p>D.<br>• A kapcsolatfelvételt külön komponensek végzik:</p><ul><li><p><strong>Acceptor</strong>: passzív, várja a bejövő kapcsolatokat</p></li><li><p><strong>Connector</strong>: aktív, létrehozza a kapcsolatot<br>• A szolgáltatás logikáját külön <strong>Service Handler</strong> valósítja meg<br>• A kapcsolat létrejötte után a Service Handlert a Dispatcher regisztrálja és kezeli<br>• A kapcsolat építés és az adatfeldolgozás fizikailag és logikailag különválik</p></li></ul><p>E.<br>• Acceptor<br>• Concrete Acceptor<br>• Connector<br>• Concrete Connector<br>• Service Handler<br>• Concrete Service Handler<br>• Dispatcher – központi elosztó<br>• Transport Handle – kapcsolatot leíró erőforrás</p><p>F.<br>• Connector kapcsolatot kezdeményez → Acceptor fogadja<br>• A kapcsolat felépülésekor Service Handler példány születik<br>• A Dispatcher regisztrálja a Service Handlert<br>• A kezelési ciklus során a Dispatcher a megfelelő Service Handlerre bízza a beérkező eseményt<br>• A feldolgozás után a Handler visszakerül vagy megszűnik</p><p>G.<br>• Dispatcher implementációjához gyakran kombinálják Reactor vagy Proactor mintával<br>• Hibakezelés és időzítések fontosak<br>• Külön thread modellek kombinálása lehetséges</p><p>H.<br>• UNIX Network Superservers (inetd)<br>• Web böngészők kapcsolati rétege<br>• CORBA ORB rendszerek<br>• Nagy terhelésű szerver alkalmazások</p><p>I:<br></p><table style="min-width: 50px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong>Előnyök</strong></p></th><th colspan="1" rowspan="1"><p><strong>Hátrányok</strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>Hordozhatóság, újrafelhasználhatóság</p></td><td colspan="1" rowspan="1"><p>Többlet komplexitás</p></td></tr><tr><td colspan="1" rowspan="1"><p>Hatékony kapcsolatkezelés</p></td><td colspan="1" rowspan="1"><p>Single point of failure lehet a Dispatcher</p></td></tr><tr><td colspan="1" rowspan="1"><p>Robusztusság</p></td><td colspan="1" rowspan="1"><p>Dedikált komponensek szükségesek</p></td></tr><tr><td colspan="1" rowspan="1"><p>Könnyű bővíthetőség</p></td><td colspan="1" rowspan="1"><p></p></td></tr></tbody></table><p></p>
7
New cards

Active Object

A.
Concurrent Object, „Chef in a Restaurant” (Active Object)

B.
Olyan helyzetekben használjuk, amikor kliens egy külön szálban futó objektumot szeretne meghívni, de nem szeretnénk kézzel szinkronizálni a hívásokat és adat-hozzáférést.

C.
• Hosszú futású műveletek nem blokkolhatják a klienst
• Több kliens hívhatja egyszerre ugyanazt az objektumot → szinkronizáció kell
• A metódushívások végrehajtása és a hívás maga legyen szétválasztva

D.
• A kliens egy proxy-t hív meg
• A proxy a hívást method request objektummá alakítja
• A method request az activation listába kerül
• A scheduler egy külön szálban végrehajtja sorban a method request-eket
• A valódi logikát a servant valósítja meg
• A kliens egy future objektumot kap vissza, amin később lekérdezheti az eredményt

E.
• Client
• Proxy
• Method Request
• Concrete Method Request
• Scheduler
• Activation List
• Servant
• Future

F.
• Client meghívja a proxy-t
• Proxy létrehoz egy method request-et és berakja az activation listába
• A scheduler folyamatosan figyeli a listát, és végrehajtja a request-et a servant-on
• A future tárolja az eredményt, amit a kliens később lekérdezhet

G.
• Kritikusan fontos a thread-esedés helyes kialakítása
• A request queue kezelése
• A future objektum implementációja
• Időzítések és prioritások kezelése

H.
• Java Timer / TimerTask
• Symbian párhuzamosítás
• Siemens ACD (Automatic Call Distribution)

I:

Előnyök

Hátrányok

Párhuzamosság kihasználása egyszerűen

Performance overhead

A kliens nem blokkol

Debuggolás nehéz

Szinkronizáció átlátható

A végrehajtási sorrend eltérhet a hívási sorrendtől

Futásidejű optimalizálási lehetőség



<p>A.<br>Concurrent Object, „Chef in a Restaurant” (Active Object)</p><p>B.<br>Olyan helyzetekben használjuk, amikor <strong>kliens egy külön szálban futó objektumot szeretne meghívni</strong>, de nem szeretnénk kézzel szinkronizálni a hívásokat és adat-hozzáférést.</p><p>C.<br>• Hosszú futású műveletek nem blokkolhatják a klienst<br>• Több kliens hívhatja egyszerre ugyanazt az objektumot → szinkronizáció kell<br>• A metódushívások végrehajtása és a hívás maga legyen <strong>szétválasztva</strong></p><p>D.<br>• A kliens egy <strong>proxy-t</strong> hív meg<br>• A proxy a hívást <strong>method request</strong> objektummá alakítja<br>• A method request az <strong>activation listába</strong> kerül<br>• A <strong>scheduler</strong> egy külön szálban végrehajtja sorban a method request-eket<br>• A valódi logikát a <strong>servant</strong> valósítja meg<br>• A kliens egy <strong>future</strong> objektumot kap vissza, amin később lekérdezheti az eredményt</p><p>E.<br>• Client<br>• Proxy<br>• Method Request<br>• Concrete Method Request<br>• Scheduler<br>• Activation List<br>• Servant<br>• Future</p><p>F.<br>• Client meghívja a proxy-t<br>• Proxy létrehoz egy method request-et és berakja az activation listába<br>• A scheduler folyamatosan figyeli a listát, és végrehajtja a request-et a servant-on<br>• A future tárolja az eredményt, amit a kliens később lekérdezhet</p><p>G.<br>• Kritikusan fontos a thread-esedés helyes kialakítása<br>• A request queue kezelése<br>• A future objektum implementációja<br>• Időzítések és prioritások kezelése</p><p>H.<br>• Java Timer / TimerTask<br>• Symbian párhuzamosítás<br>• Siemens ACD (Automatic Call Distribution)</p><p>I:<br></p><table style="min-width: 50px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong>Előnyök</strong></p></th><th colspan="1" rowspan="1"><p><strong>Hátrányok</strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>Párhuzamosság kihasználása egyszerűen</p></td><td colspan="1" rowspan="1"><p>Performance overhead</p></td></tr><tr><td colspan="1" rowspan="1"><p>A kliens nem blokkol</p></td><td colspan="1" rowspan="1"><p>Debuggolás nehéz</p></td></tr><tr><td colspan="1" rowspan="1"><p>Szinkronizáció átlátható</p></td><td colspan="1" rowspan="1"><p>A végrehajtási sorrend eltérhet a hívási sorrendtől</p></td></tr><tr><td colspan="1" rowspan="1"><p>Futásidejű optimalizálási lehetőség</p></td><td colspan="1" rowspan="1"><p></p></td></tr></tbody></table><p></p>
8
New cards

Leader-Followers

A.
„Taxi Stands” (Leader–Followers)

B.
Több szálból álló rendszer, ahol sokféle eseményt kell kezelni, és a cél az, hogy a szálak hatékonyan osszák meg az eseménykezelést, fölösleges kontextusváltások nélkül.

C.
• Nagy mennyiségű párhuzamos esemény kezelése
• Kerülni kell a lockolási overheadet és a szálváltásokat
• Skálázhatóság és teljesítmény a cél

D.
• Legyen egy thread pool
• Egyszerre mindig egy szál a Leader — ő vár az eseményre
• A többi szál Followers, passzívan várakoznak
• Ha esemény érkezik, a Leader:
– kijelöl egy új Leadert
– elkezdi feldolgozni az eseményt
• A feldolgozás végén a korábbi Leader visszaáll a Followers sorba

E.
• Handle
• Handle Set
• Event Handler
• Concrete Event Handler
• Thread Pool

F.
• Leader szál vár az eseményre
• Esemény érkezik → Leader kiválasztja a következő Leadert
• Leader kezeli az eseményt
• Ha végzett, visszaáll Follower státuszba
• Cycle ismétlődik

G.
• Szükség van hatékony thread pool implementációra
• Ütközések kezelése (deadlock elkerülése)
• Események kiosztásának optimalizálása
• Hiba esetén ne maradjon Leader nélkül a rendszer

H.
• CORBA ORB
• Webszerverek (pl. Apache variánsok)
• Transaction monitorok
• Taxi dispatching analógiák

I:

Előnyök

Hátrányok

Nagyon hatékony concurrency modell

Rugalmatlan (leader szerep kiosztása kötött)

Minimális lockolás

Hálózati hiba esetén problémás lehet

Kevés kontextusváltás →jobb performance


Egyszerűbb programozási modell



<p>A.<br>„Taxi Stands” (Leader–Followers)</p><p>B.<br>Több szálból álló rendszer, ahol sokféle eseményt kell kezelni, és a cél az, hogy <strong>a szálak hatékonyan osszák meg az eseménykezelést</strong>, fölösleges kontextusváltások nélkül.</p><p>C.<br>• Nagy mennyiségű párhuzamos esemény kezelése<br>• Kerülni kell a lockolási overheadet és a szálváltásokat<br>• Skálázhatóság és teljesítmény a cél</p><p>D.<br>• Legyen egy <strong>thread pool</strong><br>• Egyszerre mindig egy szál a <strong>Leader</strong> — ő vár az eseményre<br>• A többi szál <strong>Followers</strong>, passzívan várakoznak<br>• Ha esemény érkezik, a Leader:<br>– kijelöl egy új Leadert<br>– elkezdi feldolgozni az eseményt<br>• A feldolgozás végén a korábbi Leader visszaáll a Followers sorba</p><p>E.<br>• Handle<br>• Handle Set<br>• Event Handler<br>• Concrete Event Handler<br>• Thread Pool</p><p>F.<br>• Leader szál vár az eseményre<br>• Esemény érkezik → Leader kiválasztja a következő Leadert<br>• Leader kezeli az eseményt<br>• Ha végzett, visszaáll Follower státuszba<br>• Cycle ismétlődik</p><p>G.<br>• Szükség van hatékony thread pool implementációra<br>• Ütközések kezelése (deadlock elkerülése)<br>• Események kiosztásának optimalizálása<br>• Hiba esetén ne maradjon Leader nélkül a rendszer</p><p>H.<br>• CORBA ORB<br>• Webszerverek (pl. Apache variánsok)<br>• Transaction monitorok<br>• Taxi dispatching analógiák</p><p>I:<br></p><table style="min-width: 50px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong>Előnyök</strong></p></th><th colspan="1" rowspan="1"><p><strong>Hátrányok</strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>Nagyon hatékony concurrency modell</p></td><td colspan="1" rowspan="1"><p>Rugalmatlan (leader szerep kiosztása kötött)</p></td></tr><tr><td colspan="1" rowspan="1"><p>Minimális lockolás</p></td><td colspan="1" rowspan="1"><p>Hálózati hiba esetén problémás lehet</p></td></tr><tr><td colspan="1" rowspan="1"><p>Kevés kontextusváltás →jobb performance</p></td><td colspan="1" rowspan="1"><p></p></td></tr><tr><td colspan="1" rowspan="1"><p>Egyszerűbb programozási modell</p></td><td colspan="1" rowspan="1"><p></p></td></tr></tbody></table><p></p>