Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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_doneagent_canceled jsou terminálové stavy.
.
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 |
|---|---|
| začínat | 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. |
| stav | Načte aktuální stav objektu agent . |
| Počkej | Čeká, agent až objekt přejde do agent_done stavu.agent_canceled |
| čekat_na_vše | Čeká na vstup agent nebo agent_done stav všech zadaných agent_canceled objektů. |
| čekat_na_jednoho | Č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.