Actor Framework

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

Activity
professional
professional
Сообщения: 391
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

Re: Actor Framework

Сообщение taras_33 »

Дорогу осилит идущий © Скачайте архив вот по этой ссылке Там представлен простейший проект с очень подробным описанием по шагам как и что делать. Я думаю многое прояснится.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Аватара пользователя
Kosist

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

Re: Actor Framework

Сообщение Kosist »

Для успешной работы с акторами нужно хорошо понимать и знать ООП, т.к. нужно приложение логически разбивать на классы - и правильно выстраивать цепочку их взаимодействия. Зная это, и разобрав несколько примеров проектов с акторами, Вы уже сможете самостоятельно применять их - но опять же, нужно будет какое-то время, чтобы найти свой стиль, и свои шаблоны для приложения с акторами.
А еще лучше, это пройти 3-х дневный Actor Oriented Design курс от NI - но проблема в том, что он проводится довольно редко...
Мы делили апельсин - много наших полегло...
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Re: Actor Framework

Сообщение jane_wild »

Вот решила и я спросить об ООП, интересная тема, для общего развития так сказать. Я не совсем понимаю когда нужно делать override, а когда в этом нет необходимости. Что бы было понятней, сделала небольшой пример - во вложении. Имеется главный класс Main с одним методом Sum. Два дочерних класса Class A и Class B используют этот метод. Но используют его по разному. Class A override sum, а Class B использует напрямую родительский метод. На выходе результат один и тот же. Отсюда вопрос. Если нет необходимости менять функционал метода, нужно ли перезаписывать в дочернем классе родительский метод или его нужно использовать напрямую, как это делает Class B? Спасибо
Вложения
OOP_Question.zip
(54.58 КБ) 212 скачиваний
Artem.spb

Activity Автор
professor
professor
Сообщения: 3371
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 46 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Actor Framework

Сообщение Artem.spb »

jane_wild писал(а): Если нет необходимости менять функционал метода, нужно ли перезаписывать в дочернем классе родительский метод или его нужно использовать напрямую, как это делает Class B?
Перезаписывать точно не нужно, иначе теряется половина смысла ООП.
И странно называть "Sum" функцию, которая делает (a+b)+31
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5452
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Actor Framework

Сообщение IvanLis »

Возможно ссылка уже выкладывалась, но вот что нашел по данному направлению:
Actor Framework Basics
включает в себя 5 коротеньких уроков.
Cat писал(а):привет из 18года, решил разобраться с actor"ами и понял тут невзначай
Нужно себе на отпуск 19 запланировать :wink:
В этом году разбирался с другими вопросами.
Аватара пользователя
Cat
adviser
adviser
Сообщения: 203
Зарегистрирован: 22 июл 2010, 09:53
Версия LabVIEW: 12
Контактная информация:

Re: Actor Framework

Сообщение Cat »

Спасибо, Вам!
Рад что поднял эту тему, оказывается многих интересует, пойду курить маны)))
Чеширский Кот - совсем не тот, что чешет языком.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Actor Framework

Сообщение Vitekkz88 »

Нашел время и разобрался с Actor Framework. Перечитал тему и для меня не хватило теоретического материала в целом по этому фреймворку. Внесу лепту в развитие темы, но пока без конкретных примеров. Те примеры, которые есть в теме и по приведенным ссылкам - подойдут. Представленный материал был получен в рамках обзора выступлений разработчиков из других отраслей разработки ПО(на примере Akka-фреймворка, который реализует модель акторов). Тем не менее базовая модель программирования совпадает, отличается функциональная составляющая.
Часть 1. Введение
Actor Framework – это модель программирования, в основе которой лежит асинхронный обмен сообщениями между примитивами параллельного исполнения– акторами. Актором может быть объект/поток/процесс, который инкапсулирует данные и предоставляет операции над данными.
Поскольку каждый актор работает в отдельном потоке, то они между собой не делят память. Это позволяет избежать глобального изменяемого состояния(Global mutable state), которое является причиной многих багов в программе. Иными словами модель акторов на архитектурном уровне запрещает изменять глобальный стейт другого актора, т.к. они находятся в разных потоках(thread).
Каждый актор содержит некоторый почтовый ящик, в который прилетают сообщения. При получении сообщения актор может:
а) создать новый актор
б) послать сообщение другому актору
в) назначить поведение для обработки последующего сообщения
Когда один актор создает другого актора, первый становится родителем(parent-ом).
Модель акторов.png
Важно: акторы функционируют параллельно и ассинхронно обмениваются сообщениями.
Часть 2. Почтовые ящики, диспетчеры, маршрутизация, супервизор
Почтовый ящик – это неотъемлемый механизм взаимодействия между акторами, который позволяет принимать и извлекать сообщения. В классической модели акторов адресатом сообщения является сам актор-получатель. Т.е. для того, чтобы актор A мог отослать сообщение актору B, у актора A должна быть ссылка на актор B. Нет ссылки на актора-получателя — нет и возможности отослать ему сообщение. Если нужно выполнить рассылку 1:N, то у отправителя должны быть ссылки на всех получателей. Почтовые ящики бывают ограниченными и неограниченными, с приоритетами и без.
Диспетчеры
На каждую систему акторов приходится по одному диспетчеру, который отвечает за постановку сообщений в очередь, ведущую в почтовый ящик актора. Так же диспетчер даёт команду ящику изъять из очереди сообщение и передать его актору на обработку.
Маршрутизация
Маршрутизация позволяет за определенным именем актора скрыть целый пул акторов. Сообщения могут быть отправлены через маршрутизатор для более высокой эффективности их доставки. Маршрутизатор может использоваться внутри или снаружи субъекта и вы можете управлять маршрутизаторами самостоятельно или использовать автономный субъект маршрутизатора с возможностями конфигурации.
Супервизор
Супервизор – объект или процесс, который принимает решения при сбое. Каждый актор-родитель является супервизором своих детей. Решения при сбое:
1. Resume
2. Restart
3. Stop
4. Escalate
Каждое из приведенных понятий включает большой объем информации, который можно погуглить или почитать в стандартах. Беглый осмотр палитры акторов в LabVIEW мне показался скромным: всего 10 .vi, в то время как Akka-фреймворк даёт пользователю широкий спектр по управлению и действиями. Разберу пару тройку практических примеров(более крупных) для понимания достаточности представленной реализации.
Заключение
Модель акторов актуальна для задач типа Concurrency. Concurrency – это способность компонентов системы выполняться параллельно. Где такое встречается? Например, в приложениях с высоким количеством микросервисов(в частности компания Яндекс использует модель акторов в своих приложениях используя Akka Framework). В промышленности – это работа с большим количеством датчиков и оборудования параллельно и ассинхронно. Поскольку модель акторов имеет высокий порог вхождения, а разработка занимает больше времени, то применять этот framework следует с прицелом на будущее(повторяемость проектов и задач). Важным преимуществом модели акторов является повышенная отказоустойчивость программного обеспечения.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
Juri
I/O
I/O
Сообщения: 262
Зарегистрирован: 19 апр 2017, 23:06
Версия LabVIEW: 2021
Благодарил (а): 13 раз
Поблагодарили: 6 раз

Re: Actor Framework

Сообщение Juri »

А еще лучше, это пройти 3-х дневный Actor Oriented Design курс от NI - но проблема в том, что он проводится довольно редко...
Этот http://sine.ni.com/tacs/app/overview/p/ ... 8/id/3459/ за $ 2,475?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3371
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 46 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Actor Framework

Сообщение Artem.spb »

Usss писал(а):
А еще лучше, это пройти 3-х дневный Actor Oriented Design курс от NI - но проблема в том, что он проводится довольно редко...
Этот http://sine.ni.com/tacs/app/overview/p/ ... 8/id/3459/ за $ 2,475?
в Берлине скоро будет в два раза дешевле :)
Снимок.PNG
Аватара пользователя
Juri
I/O
I/O
Сообщения: 262
Зарегистрирован: 19 апр 2017, 23:06
Версия LabVIEW: 2021
Благодарил (а): 13 раз
Поблагодарили: 6 раз

Re: Actor Framework

Сообщение Juri »

Именно эту страницу я и отрыл, только вместо € 995 у меня стоит $ 2,475
Artem.spb

Activity Автор
professor
professor
Сообщения: 3371
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 46 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Actor Framework

Сообщение Artem.spb »

Наверно от места зависит. У меня ТОР сейчас через Германию, туда и перекидывает.
Аватара пользователя
Cat
adviser
adviser
Сообщения: 203
Зарегистрирован: 22 июл 2010, 09:53
Версия LabVIEW: 12
Контактная информация:

Re: Actor Framework

Сообщение Cat »

Коллеги у меня такой вопрос, делаю простой актор и вот от родителя к ребенку данные передавать понял, а вот как от ребенка родителю нет. Пример на старой версии фреймворка нашел. Счас пытаюсь сделать на версии 2016 там немного все по другому. Коллеги можете пояснить?
Вложения
ProbeActor.zip
(159.81 КБ) 226 скачиваний
Чеширский Кот - совсем не тот, что чешет языком.
Аватара пользователя
Kosist

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

Re: Actor Framework

Сообщение Kosist »

Cat писал(а):Коллеги у меня такой вопрос, делаю простой актор и вот от родителя к ребенку данные передавать понял, а вот как от ребенка родителю нет. Пример на старой версии фреймворка нашел. Счас пытаюсь сделать на версии 2016 там немного все по другому. Коллеги можете пояснить?
При "общении" акторов, их иерархия наследования роли не играет (т.е. все равно, кто ребенок, а кто родитель). Важно кто есть caller (тот, кто запускает актора), а кто есть callee (т.е. актор, которого запустили).
В простом случае, если из одного актора вызывать другого, то можно использовать функцию Launch Nested Actor.vi. Тогда актор, который запускает другого актора, может сохранить внутри себя ссылку на него (enqueuer), и соответственно, может посылать ему сообщения. А вызываемый актор, в свою очередь, может общаться с caller-ом при помощи ссылки, которую можно достать функцией Read Caller Enqueuer.
Если посмотрите встроенные примеры в :labview: , там все это дело есть.
Скрин из темплейт-проекта (File -> Create Project... -> All -> Actor Framework).
Call nested actor.png
Мы делили апельсин - много наших полегло...
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 391
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

Re: Actor Framework

Сообщение taras_33 »

Kosist прав. Кто чей родитель без разницы. Попробую объяснить "человеческим" языком.
Что нужно для общения двух людей? Правильно адрес. А нужно знать кто чей родитель? Можно не отвечать - ответ очевиден. Посмотрите на картинку.
Модель.png

Скажем работадатель (главный контроллер) посылает людей (nested actors) в командировку для выполнения каких то задач. Кто знает адрес этих людей? Как кто? - работадатель! Кто может прервать командировку? Он же. Командировочный может послать "далеко и без хлеба" работадателя, уйдя в запой и прервать возложенные на него задачи? Да легко. Вот собственно по этой аналогии и можно рассматривать эту модель.
Например работадатель посылая в командировку, может дать командировочному кучу инструкций (параметров), в том числе и адрес другого командировочного, что бы тот при необходимости мог послать ему сообщение напрямую, минуя главного.... Надеюсь чуточку прояснил...
Жаль времени нет, эту тему можно разобрать по винтикам, здесь нет ничего сложного.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 391
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

Re: Actor Framework

Сообщение taras_33 »

Вот значит приперся командировочный в гостинницу, обустроился (инициализировался) и вспомнил что главный просил отчитаться о прибытии. Нужно послать сообщение.
Приступаю к работе.png
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Ответить

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