Agents asynchrones
Un agent asynchrone (ou simplement un agent) est un composant d’application qui fonctionne de manière asynchrone avec d’autres agents pour résoudre des tâches informatiques plus volumineuses. Considérez un agent comme une tâche qui a un cycle de vie défini. Par exemple, un agent peut lire des données à partir d’un appareil d’entrée/sortie (par exemple, le clavier, un fichier sur disque ou une connexion réseau) et un autre agent peut effectuer une action sur ces données au fur et à mesure qu’il devient disponible. Le premier agent utilise le passage de messages pour informer le deuxième agent que d’autres données sont disponibles. Le planificateur de tâches concurrency Runtime fournit un mécanisme efficace pour permettre aux agents de bloquer et de produire de manière coopérative sans nécessiter de préemption moins efficace.
La bibliothèque agents définit la classe concurrency ::agent pour représenter un agent asynchrone. agent
est une classe abstraite qui déclare la méthode virtuelle concurrency ::agent ::run. La run
méthode exécute la tâche effectuée par l’agent. Étant donné qu’elle run
est abstraite, vous devez implémenter cette méthode dans chaque classe à partir de laquelle agent
vous dérivez .
Cycle de vie de l’agent
Les agents ont un cycle de vie défini. L’énumération concurrency ::agent_status définit les différents états d’un agent. L’illustration suivante est un diagramme d’état qui montre comment les agents progressent d’un état à un autre. Dans cette illustration, les lignes solides représentent les méthodes que vous appelez à partir de votre application ; Les lignes en pointillés représentent des méthodes appelées à partir du runtime.
Le tableau suivant décrit chaque état dans l’énumération agent_status
.
État de l'agent | Description |
---|---|
agent_created |
L’agent n’a pas été planifié pour l’exécution. |
agent_runnable |
Le runtime planifie l’agent pour l’exécution. |
agent_started |
L’agent a démarré et est en cours d’exécution. |
agent_done |
L’agent a terminé. |
agent_canceled |
L’agent a été annulé avant d’entrer dans l’état started . |
agent_created
est l’état initial d’un agent, agent_runnable
et agent_started
les états actifs, et agent_canceled
agent_done
sont les états terminals.
Utilisez la méthode concurrency ::agent ::status pour récupérer l’état actuel d’un agent
objet. Bien que la status
méthode soit concurrency-safe, l’état de l’agent peut changer à l’heure de retour de la status
méthode. Par exemple, un agent peut être dans l’état agent_started
lorsque vous appelez la status
méthode, mais déplacé vers l’état agent_done
juste après le retour de la status
méthode.
Méthodes et fonctionnalités
Le tableau suivant présente certaines des méthodes importantes qui appartiennent à la agent
classe. Pour plus d’informations sur toutes les méthodes de agent
classe, consultez classe d’agent.
Méthode | Description |
---|---|
start | Planifie l’objet agent pour l’exécution et le définit à l’état agent_runnable . |
run | Exécute la tâche à effectuer par l’objet agent . |
done | Déplace un agent vers l’état agent_done . |
cancel | Si l’agent n’a pas démarré, cette méthode annule l’exécution de l’agent et la définit à l’état agent_canceled . |
statut | Récupère l’état actuel de l’objet agent . |
Attendre | Attend que l’objet agent entre dans l’état ou agent_canceled l’étatagent_done . |
wait_for_all | Attend que tous les objets fournis agent entrent dans l’étatagent_done .agent_canceled |
wait_for_one | Attend qu’au moins un des objets fournis agent entre dans l’état ou agent_canceled l’étatagent_done . |
Après avoir créé un objet agent, appelez la méthode concurrency ::agent ::start pour la planifier pour l’exécution. Le runtime appelle la run
méthode une fois qu’elle planifie l’agent et la définit à l’état agent_runnable
.
Le runtime ne gère pas les exceptions levées par des agents asynchrones. Pour plus d’informations sur la gestion des exceptions et les agents, consultez Gestion des exceptions.
Exemple
Pour obtenir un exemple montrant comment créer une application basée sur un agent de base, consultez Procédure pas à pas : Création d’une application basée sur un agent.