Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az aszinkron ügynök (vagy csak ügynök) olyan alkalmazásösszetevő, amely aszinkron módon működik más ügynökökkel a nagyobb számítási feladatok megoldásához. Az ügynököt olyan feladatnak tekinti, amely meghatározott életciklussal rendelkezik. Előfordulhat például, hogy egy ügynök adatokat olvas be egy bemeneti/kimeneti eszközről (például a billentyűzetről, egy lemezen lévő fájlból vagy egy hálózati kapcsolatból), és egy másik ügynök az elérhetővé váláskor műveleteket hajthat végre ezen az adatokon. Az első ügynök üzenetátadással tájékoztatja a második ügynököt, hogy több adat áll rendelkezésre. Az egyidejűségi futásidejű feladatütemező hatékony mechanizmust biztosít, amely lehetővé teszi, hogy az ügynökök együttműködve blokkolhassák és hozamot eredményezhessenek anélkül, hogy kevésbé hatékony előfeltételt igényelnek.
Az Ügynökök Könyvtára meghatározza a concurrency::agent osztályt, amely egy aszinkron ügynököt jelöl.
agent egy absztrakt osztály, amely deklarálja a virtuális metódust concurrency::agent::run. A run metódus végrehajtja az ügynök által végrehajtott feladatot. Mivel run absztrakt, ezt a metódust minden olyan osztályban implementálnia kell, amelyből agentszármazik.
Ügynök életciklusa
Az ügynököknek meghatározott életciklusuk van. Az Concurrency::agent_status felsorolás határozza meg az ügynök különböző állapotait. Az alábbi ábra egy állapotdiagram, amely bemutatja, hogyan haladnak az ügynökök az egyik állapotból a másikba. Ebben az ábrán a folytonos vonalak az alkalmazásból hívható metódusokat jelölik; A pontozott vonalak a futtatókörnyezetből meghívott metódusokat jelölik.
Az alábbi táblázat a felsorolás minden állapotát agent_status ismerteti.
| Ügynök állapota | Leírás |
|---|---|
agent_created |
Az ügynök nincs végrehajtásra ütemezve. |
agent_runnable |
A futtatókörnyezet ütemezi az ügynököt a végrehajtáshoz. |
agent_started |
Az ügynök elindult és fut. |
agent_done |
Az ügynök végzett. |
agent_canceled |
Az ügynököt törölték, mielőtt belépett volna az started állapotba. |
agent_created az ügynök kezdeti állapota, agent_runnable és agent_started az aktív állapotok, és agent_doneagent_canceled a terminálállapotok.
Az párhuzamosság::agent::status metódust használja az agent objektum aktuális állapotának lekéréséhez. Bár a status metódus egyidejűség-biztos, az ügynök állapota változhat, mire a status metódus visszatér. Előfordulhat például, hogy egy ügynök a agent_started metódus hívásakor status állapotban van, de a agent_done metódus visszatérése után áthelyezve az status állapotba.
Metódusok és szolgáltatások
Az alábbi táblázat az osztályhoz tartozó néhány fontos metódust agent mutatja be. Az összes osztálymódszerről további információt az agentügynökosztály című témakörben talál.
| Metódus | Leírás |
|---|---|
| indítása | Ütemezi az agent objektumot a végrehajtáshoz, és beállítja az agent_runnable állapotra. |
| fut | Végrehajtja az objektum által agent végrehajtandó feladatot. |
| kész | Áthelyez egy ügynököt a agent_done állapotba. |
| lemondása | Ha az ügynök nem indult el, ez a metódus megszakítja az ügynök végrehajtását, és beállítja az agent_canceled állapotra. |
| állapot | Lekéri az objektum aktuális állapotát agent . |
| várj | Megvárja, amíg az agent objektum beírja az állapototagent_done.agent_canceled |
| vár_mindenre | Megvárja, amíg az összes megadott agent objektum beírja az állapototagent_done.agent_canceled |
| wait_for_one | Megvárja, amíg a megadott agent objektumok közül legalább egy belép az agent_done vagy az agent_canceled állapotba. |
Miután létrehozott egy ügynökobjektumot, hívja meg a concurrency::agent::start metódust a végrehajtás ütemezésére. A futtatókörnyezet meghívja a run metódust, miután ütemezi az ügynököt, és beállítja az agent_runnable állapotot.
A futtatókörnyezet nem kezeli az aszinkron ügynökök által kidobott kivételeket. A kivételkezelésről és az ügynökökről további információt a Kivételkezelés című témakörben talál.
példa
Egy egyszerű ügynökalapú alkalmazás létrehozását bemutató példa : Útmutató: Agent-Based-alkalmazás létrehozása.