Нужно хранить структуры горутин, которые будут иметь Контекст, отмену, функцию, родителя(группу). Такое дерево может останавливать группы горутин по сигналу из юзер спейса, перезапускать. Можно останавливать группы или добавлять к ним горутины. Это механизм оркестрации задач в кернеле.
Можно взять container/heap. Или map[*parent][]*children
Обходя список мы будем завершать горутины. Начиная с корня или с любого узла с текстовым названием.
Таким образом мы построим все запущенные подсистемы и будем контролировать их работоспособность из единой точки управления. Чего нет в го рантайме по умолчанию.
Можно записывать данные в go-memdb и прописывать на изменения данных в дереве.
Список сервисов не связан со списком горутин, или связан, надо подумать.
Сервисы порождают горутины. Поэтому группа горутин это сервис. Завершая сервис завершается его группа. Если сервис запускает сервис с горутинами то выключение корня в этой системе завершает все дочерние сервисы.
Нужно хранить структуры горутин, которые будут иметь Контекст, отмену, функцию, родителя(группу). Такое дерево может останавливать группы горутин по сигналу из юзер спейса, перезапускать. Можно останавливать группы или добавлять к ним горутины. Это механизм оркестрации задач в кернеле.
Можно взять container/heap. Или map[*parent][]*children
Обходя список мы будем завершать горутины. Начиная с корня или с любого узла с текстовым названием.
Таким образом мы построим все запущенные подсистемы и будем контролировать их работоспособность из единой точки управления. Чего нет в го рантайме по умолчанию.
Можно записывать данные в go-memdb и прописывать на изменения данных в дереве.
Список сервисов не связан со списком горутин, или связан, надо подумать.
Сервисы порождают горутины. Поэтому группа горутин это сервис. Завершая сервис завершается его группа. Если сервис запускает сервис с горутинами то выключение корня в этой системе завершает все дочерние сервисы.