Как синхронизировать асинхронно или многопоточно, распространение сигнала в графе?



@SergeySerge11

Название вопроса не придумал. Короче.
Как реализовать такое. Многопоточно или лучше асинхронно.
Не прошу писать решения, хочу найти похожий пример или общие советы, перерыл много простых примеров, и не нашел, или не заметил. Нужен короче «правильный» паттерн. Или структура.
Задача.
1. По трубам течет вода, и распространяется по всем вентилям, клапанам, тройнийникам и тд. (Короче не сантехник).
2. Нужно, сделать так что бы вода от вентиля(то есть раздвоения, разветвления), до другого шла равномерно(к примеру визуализировать).
3. Трубы, как графы, но с Открытыми или закрытыми вентилями. (На вентили по функции активации, зависит откроется ли там 0-N клапанов.
4. Тут некая сложность(Для многопоточного и того варианта что хочу узнать, ниже). Нет гарантии что слой знает, что пришла последняя порция, то есть может встать в вечное ожидание.
5. Весь процесс Конвейерный. ТО есть источник(краник) не ждем пока порция воды добежит до конца, а запускается по частоте. На линии длинной в N слоев может быть 0 — N порций.
Условия.

  1. Условие. Вода течет только вперед +-89 градусов!!!
  2. Все клапаны распределены по слоям, каждый слой на Одной Высоте
  3. Только после того как вода(или будем считать цилиндрик потока), пришел на самый последний клапан N слоя,
    все клапаны на N слое(для которых функция активации сработала), Открываются и кубик воды течет на N+1 слой

Теперь главное.Т

  1. Источников потока(кранов) несколько., тут уже нужна синхронизация, примеру 1-ый имеет частоту 1 открытие в 2 секунды, 2-ой раз в 3 секунды, а 3-ий вообще по Щелчку мышки по кнопке.
  2. Опять же надо что бы синхронная логика выполнялась. Вода должна течь равномерно(если визуализировать).
  3. До этого граф был более похож на дерево, в пред. пункте добавили несколько новых корней к дереву. Но теперь добавляем условие, что могут быть Источники могут быть между любым слоем
  4. Если допустим с другого источника пришел поток в момент выполняя функций активации на клапанах на N слое, то он обработается на следующей итерации(Весь процесс Конвеерный)

Так же условие. Нужен подходящей Паттерн.
К примеру есть сущности,
1. Клапаны.
2. Трубы.
3. Источники.
4. Диспетчер, который только получал сигналы, от труб, что кубик воды пришел из элемента на Слое N, и потом обрабатывал их всех.
Трубы должны сообщать диспетчеру, что готовы встать в очередь на слой. (то есть передают Функцию, которая связывает 2 клапана источник-приемник), когда ф-ия выполняется, приемник получит Value и дальше, если там условие активации сработает, то передаст ( OnChangProperty) следующим по цепи приемникам.
В Идеале, или то как я хочу. Диспетчер НЕ ДОЛЖЕН ЗНАТЬ ГРАФ
Так же там связи.
1 Источник — Множество приемников. Только
На картинке там 2 источника в один приемник. Но будем считать что у Приемника 2 разных канала входа. Которые 1 выход имеют.
Проект библиотека, который поставляет эти сущности.
Фронтенд же должен быть

RootSource.Connect(Elem1);
 Elem1.Connect(elem2);  
Elem1.Connect(elem3);
elem1.Connect(elem3); //....
//  то есть нужно как-то внутрь запихать  логику диспетчера,  который не будет видеть полной схемы.

63063e7374714362774384.png


Решения вопроса 0


Ответы на вопрос 0

Добавить комментарий

Ваш адрес email не будет опубликован.