Megosztás a következőn keresztül:


Aszinkron ügynökök

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.

Ügynök állapotdiagram.

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.

Lásd még

Aszinkron ügynökök könyvtára