@FloorZ

Как реализовать менеджер операций?

Пытаюсь сообразить простенький, многопоточное ядро игрового/или какого то другого движка.
В интернете и на хабре нашел пару старых статей, датированных 2009ым годом и на сайте интел абстрактное описание архитектуры.
В правильном ли я направлении копаю?

Состряпал такую вот схему
b81c8028e6634e1c9d372d7ed2531a9c.png
Менеджер состояния
Менеджер процесса
Процессы
Менеджер потоков

Менджер состояния хранит состояния процессов и занимается опросом процессов на обновление состояний с каждым тактом.
Менеджер процессов добавляет процессы в общий пул.
Менеджер потоков раскидывает пул по потокам, создавая очередь.
Менеджер процессов может инициировать извелечение любого процесса из очереди. Так он передает новое состояние процессов менеджеру состояния а так по его команде вызывается диструктор процессов.
Сами процессы, это по сути класс, который хранит id, некоторые доп параметры, в том числе и статус, а так же сам указатель на функцию, которая вызывается уже в run().

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

з.ы. это такое хобби у меня
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ответы на вопрос 1
@LightKeeper
Похоже правильно копаешь, но добавлю чуток от себя.
Слишком абстрактное описание для конкретных советов. Заботься больше о keep it simple stupid. Когда придет время доробатывать сервер, будет приятней когда он работет просто и тупо. на мой субъективный взгляд, вся схема переусложнена какими-то ненужностями.
Так же можно поизучать API подобных библиотек, я так понял ты реализуешь пул потоков, только в другом процессе. посмотри как работают другие планировщики, и пиши свой по образу и подобию (или вообще поверх), там всё-таки не одна сотня людей подумали до нас.

из примеров - boost::asio::io_service, или же Executor в java. (мне там нравится идея абстрактности интерфеса Executor).

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

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

Похожие вопросы