Udostępnij za pośrednictwem


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.

Diagram stanu agenta.

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.

Zobacz też

Biblioteki agentów asynchronicznych