Смотри, прямо готового монолитного шаблона пожалуй нет (точнее, я со своего опыта такой не нахожу).
По описанию видно что можно использовать Thread pool + Proactor + Actor model.
Вместо потока на девайс будет пул потоков + управляющий поток, т.е. семейства потоков только два. Каждый девайс - актор. Действия актора выполняются атомарно в необходимом потоке (главный/сервисный) благодаря планированию нужного обработчика для нужного потока.
Вот, подкину литературку:
www.gamedev.ru/code/articles/concurrency_models
https://habrahabr.ru/users/eao197/topics/ - SObjectizer является довольно интересной библиотекой.
И, да,
Александр Таратин прав, твою задачу можно так же решить, возможно и с большим успехом, выделив сервис каждого девайса в отдельный рабочий процесс. При этом связь управляющего процесса с рабочими легко и эффективно организуется через обмен сообщениями.
А вот и ссылка на библиотеку обмена сообщениями -
ZeroMQ.