Sdílet prostřednictvím


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.

Diagram stavu agenta

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.

Viz také

Knihovna asynchronních agentů