Agentes asincrónicos
Un agente asincrónico (o, simplemente, un agente) es un componente de aplicación que funciona de forma asincrónica con otros agentes para resolver tareas de computación mayores. Imagínese que un agente es como una tarea que tiene un ciclo de vida establecido. Por ejemplo, un agente podría leer datos de un dispositivo de entrada y salida (como el teclado, un archivo en el disco o una conexión de red) y otro agente podría realizar acciones en esos datos a medida que esté disponible. El primer agente usa el paso de mensajes para informar al segundo agente de que hay más datos disponibles. El programador de tareas de Runtime de simultaneidad proporciona un mecanismo eficaz para permitir que los agentes bloqueen y produzcan cooperativamente sin necesidad de un adelantamiento menos eficaz.
La biblioteca de agentes define la clase concurrency::agent para representar un agente asincrónico. agent
es una clase abstracta que declara el método virtual concurrency::agent::run. El método run
ejecuta la tarea que realiza el agente. Dado que run
es abstracto, debe implementar este método en cada clase que derive de agent
.
Ciclo de vida del agente
Los agentes tienen un ciclo de vida establecido. La enumeración concurrency::agent_status define los distintos estados de un agente. La ilustración siguiente es un diagrama de estado que muestra cómo progresan los agentes de un estado a otro. En esta ilustración, las líneas sólidas representan métodos a los que llama desde la aplicación; las líneas de puntos representan métodos a los que se llama desde runtime.
En la tabla siguiente se describe cada estado de la enumeración agent_status
.
Estado del agente | Descripción |
---|---|
agent_created |
El agente no se ha programado para su ejecución. |
agent_runnable |
El runtime está programando el agente para su ejecución. |
agent_started |
El agente se ha iniciado y se está ejecutando. |
agent_done |
El agente ha finalizado. |
agent_canceled |
El agente se ha cancelado antes de que entrara en el estado started . |
agent_created
es el estado inicial de un agente, agent_runnable
y agent_started
son los estados activos y agent_done
y agent_canceled
son los estados terminales.
Use el método concurrency::agent::status para recuperar el estado actual de un objeto agent
. Aunque el método status
es seguro para la simultaneidad, el estado del agente puede cambiar en el momento en que el método status
devuelve. Por ejemplo, un agente podría estar en el estado agent_started
cuando se llama al método status
, pero se movió al estado agent_done
justo después de que el método status
volviera.
Métodos y características
En la tabla siguiente, se muestran algunos de los métodos importantes que pertenecen a la clase agent
. Para obtener información sobre todos los métodos de la clase agent
, consulte la Clases de agente.
Método | Descripción |
---|---|
start | Programa el objeto agent para su ejecución y lo establece en el estado agent_runnable . |
run | Ejecuta la tarea que va a realizar el objeto agent . |
done | Mueve un agente al estado agent_done . |
cancel | Si el agente no se inició, este método cancela la ejecución del agente y lo establece en el estado agent_canceled . |
status | Recupera el estado actual del objeto agent . |
wait | Espera a que el objeto agent entre en el estado agent_done o agent_canceled . |
wait_for_all | Espera a que todos los objetos agent proporcionados entren en el estado agent_done o agent_canceled . |
wait_for_one | Espera a que al menos uno de los objetos agent proporcionados entre en el estado agent_done o agent_canceled . |
Después de crear un objeto de agente, llame al método concurrency::agent::start para programarlo para su ejecución. El runtime llama al método run
después de programar el agente y lo establece en el estado agent_runnable
.
El runtime no controla las excepciones producidas por agentes asincrónicos. Para obtener más información sobre la gestión de excepciones y agentes, consulte Gestión de excepciones.
Ejemplo
Para ver un ejemplo que muestra cómo crear una aplicación básica basada en agente, consulte Tutorial: Creación de una aplicación basada en agente.