Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En asynkron agent (eller bara agent) är en programkomponent som fungerar asynkront med andra agenter för att lösa större databehandlingsuppgifter. Tänk på en agent som en uppgift som har en fast livscykel. En agent kan till exempel läsa data från en in-/utdataenhet (till exempel tangentbordet, en fil på disken eller en nätverksanslutning) och en annan agent kan utföra åtgärder på dessa data när de blir tillgängliga. Den första agenten använder meddelandeöverföring för att informera den andra agenten om att mer data är tillgängliga. Concurrency Runtime-schemaläggaren tillhandahåller en effektiv mekanism som gör det möjligt för agenter att blockera och ge vika på ett samarbetsvilligt sätt, utan behov av den mindre effektiva metoden preemption.
Agentbiblioteket definierar samtidighet::agent-klassen för att representera en asynkron agent.
agent är en abstrakt klass som deklarerar den virtuella metoden concurrency::agent::run. Metoden run kör den uppgift som utförs av agenten. Eftersom run är abstrakt måste du implementera den här metoden i varje klass som du härleder från agent.
Agentens livscykel
Agenter har en fast livscykel. concurrency::agent_status-uppräkning definierar de olika tillstånden för en agent. Följande illustration är ett tillståndsdiagram som visar hur agenter rör sig från en tillstånd till en annan. I den här bilden representerar fasta linjer metoder som du anropar från ditt program. Streckade linjer representerar metoder som anropas från körmiljön.
I följande tabell beskrivs varje tillstånd i agent_status uppräkningen.
| Agenttillstånd | Beskrivning |
|---|---|
agent_created |
Agenten har inte schemalagts för utförande. |
agent_runnable |
Körtiden schemalägger agenten för körning. |
agent_started |
Agenten har startat och körs. |
agent_done |
Agenten är klar. |
agent_canceled |
Agenten avbröts innan den gick in i started tillståndet. |
agent_created är det ursprungliga tillståndet för en agent och agent_runnableagent_started är de aktiva tillstånden och agent_done är agent_canceled terminaltillstånden.
Använd metoden concurrency::agent::status för att hämta objektets agent aktuella tillstånd.
status Även om metoden är samtidighetssäker kan agentens tillstånd ändras när status metoden returneras. En agent kan till exempel vara i tillståndet agent_started när du anropar status metoden, men flyttas till agent_done tillståndet strax efter att status metoden har returnerats.
Metoder och funktioner
I följande tabell visas några av de viktiga metoder som tillhör agent klassen. Mer information om alla klassmetoder finns i agentagentklass.
| Metod | Beskrivning |
|---|---|
| starta | Schemalägger objektet agent för körning och anger det till agent_runnable tillståndet. |
| springa | Kör den uppgift som ska utföras av agent objektet. |
| färdig | Flyttar en agent till tillståndet agent_done . |
| avbryta | Om agenten inte startades avbryter den här metoden körningen av agenten och sätter den i agent_canceled tillståndet. |
| status | Hämtar objektets aktuella tillstånd agent . |
| Vänta | Väntar på att agent-objektet ska gå in i agent_done- eller agent_canceled-tillståndet. |
| vänta_på_alla | Väntar på att alla angivna agent-objekt ska gå in i agent_done- eller agent_canceled-tillståndet. |
| wait_for_one | Väntar på att minst ett av de angivna agent objekten går in i tillstånd agent_done eller tillstånd agent_canceled. |
När du har skapat ett agentobjekt anropar du metoden concurrency::agent::start för att schemalägga dess execution. Körtiden anropar run-metoden efter att den schemalagt agenten och sätter den till agent_runnable-tillståndet.
Körtiden tar inte hand om undantag som genereras av asynkrona agenter. Mer information om undantagshantering och agenter finns i Undantagshantering.
Exempel
Ett exempel som visar hur du skapar ett grundläggande agentbaserat program finns i Genomgång: Skapa ett Agent-Based-program.