Нужны общий сигнал остановки, отменяемые блокирующие операции и ожидание завершения через WaitGroup или аналог. У каждой горутины должен быть понятный владелец.
Как гарантировать корректное завершение всех горутин при остановке сервиса?
Нужны общий сигнал остановки, отменяемые блокирующие операции и ожидание завершения через WaitGroup или аналог. У каждой горутины должен быть понятный владелец.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Нужны общий сигнал остановки, отменяемые блокирующие операции и ожидание завершения через WaitGroup или аналог. У каждой горутины должен быть понятный владелец.
Сначала прекратите принимать новую работу, затем завершите или отмените текущую и дождитесь работников в пределах shutdown deadline. Отправки в каналы и внешние вызовы должны реагировать на отмену. Go не позволяет безопасно принудительно убить произвольную горутину, поэтому гарантии строятся на контракте выполняемого кода.