Cyapa
@Cyapa

Как лучше организовать многопоточную архитектуру?

Есть некоторое оборудование подключенное к компьютеру. Программа должна управлять оборудованием и периодически отсылать данные на сервер.
На каждый девайс запускается по управляющему потоку. Коммутатор, через который управляющие потоки отправляют данные на сервер, так же запускается в отдельном потоке.
Из-за ошибок оборудования управляющий поток может завершить свою работу. В этом случае его нужно перезапустить. Если подключается новое оборудование для него нужно так же запустить новый управляющий поток.
Так же пользователю нужно дать возможность завершить те или иные потоки вручную.

Логика управляющих потоков и коммутатора итерационная, то есть у реализующих классов есть метод tick, который должен вызываться в цикле.

Внимание вопрос: как лучше это все организовать? Есть ли какие-то шаблонные решения (по типу пула потоков)?
  • Вопрос задан
  • 600 просмотров
Решения вопроса 1
@MarkusD Куратор тега C++
все время мелю чепуху :)
Смотри, прямо готового монолитного шаблона пожалуй нет (точнее, я со своего опыта такой не нахожу).
По описанию видно что можно использовать Thread pool + Proactor + Actor model.
Вместо потока на девайс будет пул потоков + управляющий поток, т.е. семейства потоков только два. Каждый девайс - актор. Действия актора выполняются атомарно в необходимом потоке (главный/сервисный) благодаря планированию нужного обработчика для нужного потока.

Вот, подкину литературку:
www.gamedev.ru/code/articles/concurrency_models
https://habrahabr.ru/users/eao197/topics/ - SObjectizer является довольно интересной библиотекой.

И, да, Александр Таратин прав, твою задачу можно так же решить, возможно и с большим успехом, выделив сервис каждого девайса в отдельный рабочий процесс. При этом связь управляющего процесса с рабочими легко и эффективно организуется через обмен сообщениями.
А вот и ссылка на библиотеку обмена сообщениями - ZeroMQ.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Из-за ошибок оборудования управляющий поток может завершить свою работу.

При таком раскладе я бы так вообще по отдельным процессам разнес, чтобы меньше думать о возможном некорректном высвобождении ресурсов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы