Agenci asynchroniczni
Agent asynchroniczny (lub tylko agent) to składnik aplikacji, który asynchronicznie współpracuje z innymi agentami w celu rozwiązywania większych zadań obliczeniowych. Pomyśl o agencie jako zadaniu, które ma ustawiony cykl życia. Na przykład jeden agent może odczytywać dane z urządzenia wejściowego/wyjściowego (takiego jak klawiatura, plik na dysku lub połączenie sieciowe), a inny agent może wykonać akcję na tych danych, gdy staną się dostępne. Pierwszy agent używa przekazywania komunikatów, aby poinformować drugiego agenta o dostępności większej ilości danych. Harmonogram zadań współbieżności środowiska uruchomieniowego zapewnia wydajny mechanizm umożliwiający agentom blokowanie i zapewnianie współpracy bez konieczności mniej wydajnego wywłaszczania.
Biblioteka agentów definiuje klasę concurrency::agent reprezentującą agenta asynchronicznego. agent
to abstrakcyjna klasa, która deklaruje współbieżność metody wirtualnej::agent::run. Metoda run
wykonuje zadanie wykonywane przez agenta. Ponieważ run
jest abstrakcyjna, należy zaimplementować tę metodę w każdej klasie pochodzącej z klasy agent
.
Cykl życia agenta
Agenci mają ustawiony cykl życia. Wyliczenie współbieżności::agent_status definiuje różne stany agenta. Poniższa ilustracja przedstawia diagram stanu pokazujący, jak agenci przechodzą z jednego stanu do drugiego. Na tej ilustracji linie stałe reprezentują metody wywoływane z aplikacji; Kropkowane wiersze reprezentują metody wywoływane ze środowiska uruchomieniowego.
W poniższej agent_status
tabeli opisano każdy stan w wyliczenia.
Stan agenta | opis |
---|---|
agent_created |
Agent nie został zaplanowany do wykonania. |
agent_runnable |
Środowisko uruchomieniowe planuje agenta do wykonania. |
agent_started |
Agent został uruchomiony i działa. |
agent_done |
Agent zakończył. |
agent_canceled |
Agent został anulowany przed jego wejściem do started stanu. |
agent_created
jest stanem początkowym agenta agent_runnable
i agent_started
są stanami aktywnymi i agent_done
agent_canceled
są stanami terminalu.
Użyj metody concurrency::agent::status, aby pobrać bieżący stan agent
obiektu. status
Mimo że metoda jest bezpieczna współbieżnością, stan agenta może ulec zmianie przez czas zwracania status
metody. Na przykład agent może być w agent_started
stanie wywołania status
metody, ale przeniesiony do agent_done
stanu tuż po status
powrocie metody.
Metody i funkcje
W poniższej tabeli przedstawiono niektóre ważne metody należące do agent
klasy. Aby uzyskać więcej informacji na temat wszystkich agent
metod klasy, zobacz Klasa agenta.
Metoda | opis |
---|---|
start | agent Planuje obiekt do wykonania i ustawia go na agent_runnable stan . |
uruchom | Wykonuje zadanie, które ma być wykonywane przez agent obiekt. |
gotowy | Przenosi agenta agent_done do stanu. |
Anuluj | Jeśli agent nie został uruchomiony, ta metoda anuluje wykonywanie agenta i ustawia go na agent_canceled stan . |
status | Pobiera bieżący stan agent obiektu. |
czekać | Czeka na agent wprowadzenie agent_done obiektu lub agent_canceled . |
wait_for_all | Czeka, aż wszystkie dostarczone agent obiekty wejdą w agent_done stan lub agent_canceled . |
wait_for_one | Czeka na co najmniej jeden z podanych agent obiektów, aby wprowadzić agent_done stan lub agent_canceled . |
Po utworzeniu obiektu agenta wywołaj metodę concurrency::agent::start , aby zaplanować jego wykonanie. Środowisko uruchomieniowe wywołuje metodę run
po zaplanowaniu agenta i ustawia je na agent_runnable
stan .
Środowisko uruchomieniowe nie zarządza wyjątkami zgłaszanymi przez agentów asynchronicznych. Aby uzyskać więcej informacji na temat obsługi wyjątków i agentów, zobacz Obsługa wyjątków.
Przykład
Aby zapoznać się z przykładem tworzenia podstawowej aplikacji opartej na agencie, zobacz Przewodnik: tworzenie aplikacji opartej na agencie.