Асинхронные агенты
Асинхронный агент (или просто агент) — это компонент приложения, который работает асинхронно с другими агентами для решения более крупных вычислительных задач. Подумайте об агенте как задаче, которая имеет заданный жизненный цикл. Например, один агент может считывать данные с устройства ввода и вывода (например, клавиатуры, файла на диске или сетевого подключения), а другой агент может выполнять действия с данными по мере его доступности. Первый агент использует передачу сообщений для информирования второго агента о доступности дополнительных данных. Планировщик задач среды выполнения параллелизма предоставляет эффективный механизм для того, чтобы агенты могли блокировать и давать совместно, не требуя менее эффективного прерывания.
Библиотека агентов определяет класс параллелизма::agent для представления асинхронного агента. agent
— абстрактный класс, который объявляет параллелизм виртуального метода ::agent::run. Метод run
выполняет задачу, выполняемую агентом. Так как run
это абстрактно, этот метод необходимо реализовать в каждом классе, наследуемом от agent
него.
Жизненный цикл агента
Агенты имеют заданный жизненный цикл. Перечисление параллелизма::agent_status определяет различные состояния агента. На следующем рисунке показана схема состояния, показывающая ход выполнения агентов из одного состояния в другое. На этом рисунке сплошные линии представляют методы, вызываемые из приложения; Пунктирные линии представляют методы, вызываемые из среды выполнения.
В следующей таблице описано каждое agent_status
состояние перечисления.
Состояние агентов | Description |
---|---|
agent_created |
Агент не запланирован на выполнение. |
agent_runnable |
Среда выполнения выполняет планирование агента для выполнения. |
agent_started |
Агент запущен и запущен. |
agent_done |
Агент завершил работу. |
agent_canceled |
Агент был отменен, прежде чем он вошел в started состояние. |
agent_created
— начальное состояние агента, agent_runnable
agent_started
а также активные состояния и agent_done
agent_canceled
являются состояниями терминала.
Используйте метод параллелизма::agent::status, чтобы получить текущее состояние agent
объекта. status
Хотя метод является параллелизмом безопасным, состояние агента может измениться по времени status
возврата метода. Например, агент может находиться в agent_started
состоянии при вызове status
метода, но перемещается agent_done
в состояние сразу после status
возврата метода.
Методы и компоненты
В следующей таблице показаны некоторые важные методы, принадлежащие классу agent
. Дополнительные сведения обо всех методах agent
класса см . в разделе "Класс агента".
Метод | Description |
---|---|
Начало | 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
.
Среда выполнения не управляет исключениями, создаваемыми асинхронными агентами. Дополнительные сведения об обработке исключений и агентах см. в разделе "Обработка исключений".
Пример
Пример создания базового приложения на основе агента см. в пошаговом руководстве по созданию приложения на основе агента.