Russian Qt Forum
Ноябрь 22, 2024, 00:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сохранение работы основного потока при падении дополнительных.  (Прочитано 8245 раз)
unduty
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« : Июнь 13, 2021, 11:00 »

Доброе время суток, Уважаемы гуру, прошу подсказать принцип организации стабильного консольного приложения на сервере.
Имеется три потока
 - "стабильный" основной поток запускающий остальные
 - поток со "стабильным" не меняемым кодом собирает информацию и должен работать при падении третьего
 - поток с нестабильным изменяемым и сложным кодом в котором возможно падение.

Какие есть механизмы для контроля и перезапуска третьего потока при падении, при условии постоянной работы второго потока ?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Июнь 13, 2021, 11:09 »

Выбора тут нет, чтобы перезапускать - надо сначала дать упавшей нитке выйти, др надежных способов ее прибить нет. Ну значит в ней юзать try/catch, по сути это все
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #2 : Июнь 13, 2021, 11:38 »

Доброе время суток, Уважаемы гуру, прошу подсказать принцип организации стабильного консольного приложения на сервере.
Имеется три потока
 - "стабильный" основной поток запускающий остальные
 - поток со "стабильным" не меняемым кодом собирает информацию и должен работать при падении третьего
 - поток с нестабильным изменяемым и сложным кодом в котором возможно падение.

Какие есть механизмы для контроля и перезапуска третьего потока при падении, при условии постоянной работы второго потока ?
Можно перейти на микросервисную архитектуру - на каждую "работу" свой процесс.
Основной процесс запускает и контроллирует работу остальных процессов. Он может не только контроллировать, что запущенный им процесс еще активен (не упал), но и что он не завис.
Если дочерний процесс упал или повис, то основной может безопастно его убить и перезапустить.
Общаться все процессы могут через очередь сообщений (MQ), их много разных с разными возможностями.
Эта архитектура легко маштабируется в будущем, например если понадобится несколько процессов-добытчиков и несколько процессов-обработчиков.
« Последнее редактирование: Июнь 13, 2021, 14:54 от Old » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Июнь 21, 2021, 16:18 »

WatchDog же Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Июнь 21, 2021, 16:21 »

WatchDog же Улыбающийся
И что? Улыбающийся
Поняли что поток завис, что с ним дальше делать?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Июнь 22, 2021, 12:12 »

WatchDog же Улыбающийся
И что? Улыбающийся
Поняли что поток завис, что с ним дальше делать?

Так по условиям задачи упал, а не завис.
Ошибку выдать и перезапустить Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #6 : Июль 28, 2021, 11:30 »

Detached tgreads
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 22.