Delen via


Asynchrone agents

Een asynchrone agent (of alleen agent) is een toepassingsonderdeel dat asynchroon werkt met andere agents om grotere rekentaken op te lossen. U kunt een agent beschouwen als een taak met een vaste levenscyclus. Een agent kan bijvoorbeeld gegevens lezen van een invoer-/uitvoerapparaat (zoals het toetsenbord, een bestand op schijf of een netwerkverbinding) en een andere agent kan actie uitvoeren op die gegevens zodra deze beschikbaar zijn. De eerste agent gebruikt bericht doorgeven om de tweede agent te informeren dat er meer gegevens beschikbaar zijn. De Taakplanner van de Gelijktijdigheidsruntime biedt een efficiënt mechanisme om agents in staat te stellen coöperatief te blokkeren en op te leveren zonder dat er minder efficiënte procesonderbreking nodig is.

De bibliotheek voor agents definieert de concurrency::agent-klasse die een asynchrone agent vertegenwoordigt. agent is een abstracte klasse die de virtuele methode concurrency::agent::run declareert. Met de run-methode wordt de taak uitgevoerd door de agent. Omdat run abstract is, moet u deze methode implementeren in elke klasse die u hebt afgeleid van agent.

Levenscyclus van agent

Agents hebben een vaste levenscyclus. De concurrency::agent_status opsomming definieert de verschillende toestanden van een agent. De volgende afbeelding is een statusdiagram dat laat zien hoe agents van de ene status naar de andere gaan. In deze afbeelding vertegenwoordigen ononderbroken lijnen methoden die u vanuit uw toepassing aanroept; stippellijnen vertegenwoordigen methoden die worden aangeroepen vanuit de runtime.

Diagram van de agentstatus.

In de volgende tabel wordt elke status in de agent_status opsomming beschreven.

Agentstatus Beschrijving
agent_created De agent is niet gepland voor uitvoering.
agent_runnable De runtime plant de uitvoering van de agent in.
agent_started De agent is gestart en wordt uitgevoerd.
agent_done De agent heeft het afgerond.
agent_canceled De agent is geannuleerd voordat deze de started status heeft ingevoerd.

agent_createdis de initiële status van een agent en agent_runnableagent_started zijn de actieve statussen en agent_doneagent_canceled zijn de terminalstatussen.

Gebruik de concurrency::agent::status methode om de huidige status van een agent object op te halen. Hoewel de status methode gelijktijdigheidsveilig is, kan de status van de agent worden gewijzigd op het moment dat de status methode wordt geretourneerd. Een agent kan bijvoorbeeld in de agent_started status zijn wanneer u de status methode aanroept, maar naar de agent_done status gaan net nadat de status methode is geretourneerd.

Methoden en functies

In de volgende tabel ziet u enkele van de belangrijke methoden die deel uitmaken van de agent klasse. Zie agent voor meer informatie over alle klassemethoden.

Methode Beschrijving
starten Plant het agent object voor uitvoering en stelt het in op de agent_runnable status.
uitvoeren Hiermee wordt de taak uitgevoerd die door het agent object moet worden uitgevoerd.
klaar Hiermee verplaatst u een agent naar de agent_done status.
annuleren Als de agent niet is gestart, annuleert deze methode de uitvoering van de agent en wordt deze ingesteld op de agent_canceled toestand.
status Haalt de huidige status van het agent object op.
wachten Wacht totdat het agent object de agent_done of agent_canceled status heeft ingevoerd.
wait_for_all Wacht tot alle opgegeven agent objecten de agent_done-staat of de agent_canceled-staat hebben ingevoerd.
wachten_op_een Wacht tot ten minste één van de opgegeven agent objecten de agent_done of agent_canceled status bereikt.

Nadat u een agentobject hebt gemaakt, roept u de concurrency::agent::start methode aan om het in te plannen voor uitvoering. De runtime roept de run methode aan nadat de agent is gepland en ingesteld op de agent_runnable status.

De runtime beheert geen uitzonderingen die worden gegenereerd door asynchrone agents. Zie Uitzonderingsafhandeling voor meer informatie over het afhandelen van uitzonderingen en agents.

Voorbeeld

Zie Walkthrough: Een Agent-Based-toepassing maken voor een voorbeeld waarin wordt getoond hoe u een eenvoudige toepassing op basis van een agent maakt.

Zie ook

Bibliotheek met asynchrone agents