Asynchronní agenti
Asynchronní agent (nebo jenom agent) je komponenta aplikace, která pracuje asynchronně s jinými agenty k řešení větších výpočetních úloh. Agenta si můžete představit jako úlohu, která má nastavený životní cyklus. Jeden agent může například číst data ze vstupního/výstupního zařízení (například z klávesnice, souboru na disku nebo síťového připojení) a jiný agent může s těmito daty provádět akce, jakmile budou k dispozici. První agent pomocí předávání zpráv informuje druhého agenta, že je k dispozici více dat. Plánovač úloh Concurrency Runtime poskytuje efektivní mechanismus, který umožňuje agentům blokovat a poskytovat spolupráci bez nutnosti méně efektivní preempce.
Knihovna agentů definuje třídu concurrency::agent , která představuje asynchronního agenta. agent
je abstraktní třída, která deklaruje virtuální metodu concurrency::agent::run. Metoda run
provede úlohu prováděnou agentem. Vzhledem k tomu run
, že je abstraktní, je nutné implementovat tuto metodu ve všech třídách, které odvozujete z agent
.
Životní cyklus agenta
Agenti mají nastavený životní cyklus. Výčet concurrency::agent_status definuje různé stavy agenta. Následující obrázek je stavový diagram, který ukazuje, jak agenti postupuje z jednoho stavu do druhého. Na tomto obrázku představují plné čáry metody, které voláte z aplikace; tečkované čáry představují metody volané z modulu runtime.
Následující tabulka popisuje jednotlivé stavy v výčtu agent_status
.
Stav agenta | Popis |
---|---|
agent_created |
Agent nebyl naplánován ke spuštění. |
agent_runnable |
Modul runtime plánuje spuštění agenta. |
agent_started |
Agent se spustil a je spuštěný. |
agent_done |
Agent byl dokončen. |
agent_canceled |
Agent byl zrušen před vstupem do started stavu. |
agent_created
je počáteční stav agenta agent_runnable
a agent_started
jedná se o aktivní stavy a agent_done
agent_canceled
jsou terminálové stavy.
K načtení aktuálního agent
stavu objektu použijte metodu concurrency::agent::status. status
I když je metoda bezpečná pro souběžnost, stav agenta se může změnit v době, kdy status
metoda vrátí. Například agent může být ve agent_started
stavu při volání status
metody, ale přesunut do agent_done
stavu těsně po status
vrácení metody.
Metody a funkce
Následující tabulka uvádí některé z důležitých metod, které patří do agent
třídy. Další informace o všech agent
metodách třídy naleznete v tématu třída agenta.
metoda | Popis |
---|---|
start | Naplánuje agent objekt pro spuštění a nastaví ho do agent_runnable stavu. |
Spusťte | Spustí úlohu, která má být provedena objektem agent . |
hotový | Přesune agenta do agent_done stavu. |
zrušit | Pokud agent nebyl spuštěn, tato metoda zruší spuštění agenta a nastaví ho do agent_canceled stavu. |
status | Načte aktuální stav objektu agent . |
Počkej | Čeká, agent až objekt přejde do agent_done stavu.agent_canceled |
wait_for_all | Čeká na vstup agent_done nebo agent_canceled stav všech zadaných agent objektů. |
wait_for_one | Čeká alespoň na jeden ze zadaných agent objektů, které se zadají do agent_done stavu.agent_canceled |
Po vytvoření objektu agenta zavolejte metodu concurrency::agent::start , která naplánuje spuštění. Modul runtime volá metodu run
po naplánování agenta a nastaví ji do agent_runnable
stavu.
Modul runtime nespravuje výjimky vyvolané asynchronními agenty. Další informace o zpracování výjimek a agentech naleznete v tématu Zpracování výjimek.
Příklad
Příklad, který ukazuje, jak vytvořit základní aplikaci založenou na agentech, najdete v tématu Návod: Vytvoření aplikace založené na agentech.