Clojure - Агенты
Как неоднократно отмечалось, Clojure - это язык программирования, в котором многие типы данных неизменяемы, а это означает, что единственный способ изменить значение переменной - это создать новую переменную и присвоить ей новое значение. Однако Clojure предоставляет некоторые элементы, которые могут создавать изменяемое состояние. Мы видели, что этого можно достичь с помощью типа данных Atom. Другой способ сделать это - через агентов.
Agentsобеспечивают независимую асинхронную смену отдельных местоположений. Агенты привязаны к одному месту хранения в течение своего времени жизни и допускают только изменение этого места (до нового состояния) в результате действия. Действия - это функции (необязательно с дополнительными аргументами), которые асинхронно применяются к состоянию агента и возвращаемое значение которых становится новым состоянием агента.
В Clojure с агентами возможны следующие операции.
Sr. No. | Операции и описание |
---|---|
1 | агент Агент создается с помощью команды агента. |
2 | Отправить Эта функция используется для отправки значения агенту. |
3 | Shutdown-агенты Эта функция используется для завершения работы всех работающих агентов. |
4 | Отправить Есть случаи, когда агенту назначается функция, которая по своей природе является блокирующей. |
5 | в ожидании Поскольку существует задержка при обновлении значения агента, Clojure предоставил функцию ожидания, которая используется для указания времени в миллисекундах для ожидания обновления агента. |
6 | Ждите Блокирует текущий поток (на неопределенный срок!) До тех пор, пока не будут выполнены все действия, отправленные на данный момент этим потоком или агентом агенту (ам). Будет блокироваться на отказавших агентах. |
7 | агент-ошибка Возвращает исключение, созданное во время асинхронного действия агента, если агент не работает. Возвращает ноль, если агент не отказал. |