Асинхронные агенты

Асинхронный агент (или просто агент) — это компонент приложения, который работает асинхронно с другими агентами для решения более крупных вычислительных задач. Подумайте об агенте как задаче, которая имеет заданный жизненный цикл. Например, один агент может считывать данные с устройства ввода и вывода (например, клавиатуры, файла на диске или сетевого подключения), а другой агент может выполнять действия с данными по мере его доступности. Первый агент использует передачу сообщений для информирования второго агента о доступности дополнительных данных. Планировщик задач среды выполнения параллелизма предоставляет эффективный механизм для того, чтобы агенты могли блокировать и давать совместно, не требуя менее эффективного прерывания.

Библиотека агентов определяет класс параллелизма::agent для представления асинхронного агента. agent — абстрактный класс, который объявляет параллелизм виртуального метода ::agent::run. Метод run выполняет задачу, выполняемую агентом. Так как run это абстрактно, этот метод необходимо реализовать в каждом классе, наследуемом от agentнего.

Жизненный цикл агента

Агенты имеют заданный жизненный цикл. Перечисление параллелизма::agent_status определяет различные состояния агента. На следующем рисунке показана схема состояния, показывающая ход выполнения агентов из одного состояния в другое. На этом рисунке сплошные линии представляют методы, вызываемые из приложения; Пунктирные линии представляют методы, вызываемые из среды выполнения.

Agent State Diagram.

В следующей таблице описано каждое agent_status состояние перечисления.

Состояние агентов Description
agent_created Агент не запланирован на выполнение.
agent_runnable Среда выполнения выполняет планирование агента для выполнения.
agent_started Агент запущен и запущен.
agent_done Агент завершил работу.
agent_canceled Агент был отменен, прежде чем он вошел в started состояние.

agent_created — начальное состояние агента, agent_runnableagent_started а также активные состояния и agent_doneagent_canceled являются состояниями терминала.

Используйте метод параллелизма::agent::status, чтобы получить текущее состояние agent объекта. status Хотя метод является параллелизмом безопасным, состояние агента может измениться по времени status возврата метода. Например, агент может находиться в agent_started состоянии при вызове status метода, но перемещается agent_done в состояние сразу после status возврата метода.

Методы и компоненты

В следующей таблице показаны некоторые важные методы, принадлежащие классу agent . Дополнительные сведения обо всех методах agent класса см . в разделе "Класс агента".

Способ Описание
Начало agent Планирует выполнение объекта и задает его agent_runnable состояние.
run Выполняет задачу, выполняемую agent объектом.
Договорились Перемещает агент в agent_done состояние.
cancel Если агент не был запущен, этот метод отменяет выполнение агента и задает его состоянию agent_canceled .
состояние Извлекает текущее состояние agent объекта.
Подожди Ожидает, пока agent объект войдет в agent_done состояние или agent_canceled состояние.
wait_for_all Ожидает, чтобы все предоставленные agent объекты вошли в agent_done состояние или agent_canceled состояние.
wait_for_one Ожидает по крайней мере одного из предоставленных agent объектов ввести agent_done или agent_canceled состояние.

После создания объекта агента вызовите метод параллелизма::agent::start , чтобы запланировать его выполнение. Среда выполнения вызывает run метод после планирования агента и задает его состоянию agent_runnable .

Среда выполнения не управляет исключениями, создаваемыми асинхронными агентами. Дополнительные сведения об обработке исключений и агентах см. в разделе "Обработка исключений".

Пример

Пример создания базового приложения на основе агента см. в пошаговом руководстве по созданию приложения на основе агента.

См. также

Библиотека асинхронных агентов