Actor Framework

Общие принципы, проектирование, модуляризация, темплейты и шаблоны
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1145
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 15 раз
Поблагодарили: 16 раз
Контактная информация:

Re: Actor Framework

Сообщение Kosist »

jane_wild писал(а): 29 апр 2021, 14:34 Возможно ли как то получать информацию о количестве сообщений в очереди, от кого они были посланы? Может вообще можно эту самую очередь очистить?
Спасибо.
Стандартными способами - нельзя ни узнать инфу о количестве сообщений, ни очистить очередь.
Я бы посоветовал сделать helper loop для актора, которому посылаются сообщения.
Философия акторов такова, что они должны всегда быть доступными для приема и обработки сообщений.
Поэтому, сделайте так что когда актор получит сообщение, он его "перенаправит" в цикл-помощник, через обычную очередь. А уже в этом цикле Вы можете обрабатывать сообщение и контролллировать количество сообщений в ней.
Плюс еще выгода такого решения - не нужно переделывать остальные акторы, а только тот актор в котором Вы обрабатываете сообщения.
Мы делили апельсин - много наших полегло...
Аватара пользователя
Usss
I/O
I/O
Сообщения: 161
Зарегистрирован: 19 апр 2017, 23:06
Версия LabVIEW: 2018
Благодарил (а): 3 раза

Re: Actor Framework

Сообщение Usss »

Возможно это поможет. Помимо основного сообщения я к нему всегда прикрепляю очередь Handshake. На картинке отправка сообщения актору. Этот код не завершится до тех пор пока актор не отправит ответ через Set Occurrence.vi либо пока не истечет timeout.
Handshake это одноразовая очередь, которая уничтожается сразу как только в нее поступит одно сообщение.
Это поможет контролировать ход исполнения задачи и не посылать новые сообщения актору, пока он обрабатывает старое. Мне пригождается не только в акторах, а вообще везде, где есть параллельные циклы обработки разных задач.
Пароль 113
Вложения
1.png
Handshake.llb
(53.01 КБ) 4 скачивания
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1145
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 15 раз
Поблагодарили: 16 раз
Контактная информация:

Re: Actor Framework

Сообщение Kosist »

Usss писал(а): 29 апр 2021, 16:17 Возможно это поможет. Помимо основного сообщения я к нему всегда прикрепляю очередь Handshake.
Авторы Actor Framework в :labview: предали бы Вас анафеме :haha: В AF либке есть Reply Message, который "заставляет" акторов быть синхронными - но т.к. это не соотвествует "философии" акторов, NI не делало скриптинг-инструменты для создания таких сообщений, чтобы сделать их использование для пользователей максимально неудобным.
Смысл акторов в том, что они исполняются асинхронно. А если нужно отслеживать порядок исполнения - то значит что-то не так с архитектурой акторов...
Верю, что в Вашем случае код работает и все хорошо - и это отлично - но это неправильный паттерн для акторов.
Мы делили апельсин - много наших полегло...
Аватара пользователя
jane_wild
developer
developer
Сообщения: 262
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 23 раза
Поблагодарили: 3 раза

Re: Actor Framework

Сообщение jane_wild »

Kosist писал(а): 29 апр 2021, 15:18 Стандартными способами - нельзя ни узнать инфу о количестве сообщений, ни очистить очередь.
Я бы посоветовал сделать helper loop для актора, которому посылаются сообщения.
Философия акторов такова, что они должны всегда быть доступными для приема и обработки сообщений.
Поэтому, сделайте так что когда актор получит сообщение, он его "перенаправит" в цикл-помощник, через обычную очередь. А уже в этом цикле Вы можете обрабатывать сообщение и контролллировать количество сообщений в ней.
Плюс еще выгода такого решения - не нужно переделывать остальные акторы, а только тот актор в котором Вы обрабатываете сообщения.
Интересная идея обязательно попробую.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Модели программирования»