Asynchrone Agents

Ein asynchroner Agent (oder nur Agent) ist eine Anwendungskomponente, die asynchron mit anderen Agents funktioniert, um größere Computeraufgaben zu lösen. Stellen Sie sich einen Agenten als Aufgabe vor, die einen festgelegten Lebenszyklus aufweist. Beispielsweise kann ein Agent Daten von einem Eingabe-/Ausgabegerät (z. B. Tastatur, Datei auf datenträger oder Netzwerkverbindung) lesen, und ein anderer Agent kann Aktionen für diese Daten ausführen, sobald diese verfügbar sind. Der erste Agent verwendet die Nachrichtenübergabe, um den zweiten Agent darüber zu informieren, dass weitere Daten verfügbar sind. Der Taskplaner "Concurrency Runtime" bietet einen effizienten Mechanismus, mit dem Agents kooperativ blockieren und ausbeuten können, ohne dass eine weniger effiziente Vorbesteuerung erforderlich ist.

Die Agents-Bibliothek definiert die Parallelitätsklasse::agent , um einen asynchronen Agent darzustellen. agent ist eine abstrakte Klasse, die die virtuelle Methode Parallelität::agent::run deklariert. Die run Methode führt die Aufgabe aus, die vom Agent ausgeführt wird. Da run es sich um eine abstrakte Methode handelt, müssen Sie diese Methode in jeder Klasse implementieren, von agentder Sie abgeleitet sind.

Agent-Lebenszyklus

Agents verfügen über einen festgelegten Lebenszyklus. Die Parallelität::agent_status-Aufzählung definiert die verschiedenen Zustände eines Agents. Die folgende Abbildung ist ein Zustandsdiagramm, das zeigt, wie Agents von einem Zustand zu einem anderen wechseln. In dieser Abbildung stellen durchgezogene Linien Methoden dar, die Sie von Ihrer Anwendung aufrufen; Gepunktete Linien stellen Methoden dar, die von der Laufzeit aufgerufen werden.

Agent State Diagram.

In der folgenden Tabelle werden die einzelnen Status in der agent_status Enumeration beschrieben.

Agentstatus Beschreibung
agent_created Der Agent wurde nicht für die Ausführung geplant.
agent_runnable Die Laufzeit plant den Agent für die Ausführung.
agent_started Der Agent wurde gestartet und wird ausgeführt.
agent_done Der Agent ist fertig.
agent_canceled Der Agent wurde abgebrochen, bevor er in den started Zustand gelangt war.

agent_created ist der Anfangszustand eines Agenten agent_runnable und agent_started sind die aktiven Zustände und agent_doneagent_canceled sind die Terminalzustände.

Verwenden Sie die Parallelität::agent::status-Methode , um den aktuellen Status eines agent Objekts abzurufen. Obwohl die status Methode parallel ist, kann sich der Status des Agents ändern, wenn die status Methode zurückgegeben wird. Beispielsweise könnte sich ein Agent im agent_started Zustand befinden, wenn Sie die status Methode aufrufen, aber direkt nach dem Zurückgeben der status Methode in den agent_done Zustand verschoben.

Methoden und Features

In der folgenden Tabelle sind einige der wichtigen Methoden aufgeführt, die zur agent Klasse gehören. Weitere Informationen zu allen agent Klassenmethoden finden Sie unter agent Class.

Methode Beschreibung
start Plant das Objekt für die agent Ausführung und legt es auf den agent_runnable Zustand fest.
run Führt die Aufgabe aus, die agent vom Objekt ausgeführt werden soll.
fertig Verschiebt einen Agent in den agent_done Zustand.
cancel Wenn der Agent nicht gestartet wurde, bricht diese Methode die Ausführung des Agents ab und legt ihn auf den agent_canceled Zustand fest.
status Ruft den aktuellen Status des agent Objekts ab.
Warte Wartet, bis das agent Objekt in den Zustand oder agent_canceled in den agent_done Zustand wechselt.
wait_for_all Wartet auf alle bereitgestellten agent Objekte, um in den agent_done Zustand zu agent_canceled gelangen.
wait_for_one Wartet auf mindestens eins der bereitgestellten agent Objekte, um in den agent_done Zustand zu agent_canceled gelangen.

Rufen Sie nach dem Erstellen eines Agentobjekts die Parallelität::agent::start-Methode auf, um sie für die Ausführung zu planen. Die Laufzeit ruft die Methode nach dem run Planen des Agents auf und legt sie auf den agent_runnable Zustand fest.

Die Laufzeit verwaltet keine Ausnahmen, die von asynchronen Agents ausgelöst werden. Weitere Informationen zur Ausnahmebehandlung und zu Agents finden Sie unter "Ausnahmebehandlung".

Beispiel

Ein Beispiel zum Erstellen einer einfachen agentbasierten Anwendung finden Sie unter Walkthrough: Creating an Agent-Based Application.

Siehe auch

Asynchrone Agents Library