Какими способами осуществляется контроль и координация работы goroutine в Go?
Ответ от нейросети
sobes.tech AI
В Go контроль и координация работы goroutine осуществляется несколькими способами:
-
Каналы (channels) — основной механизм для обмена данными и синхронизации между goroutine. Каналы позволяют безопасно передавать значения и блокируют отправителя или получателя до готовности.
-
sync.WaitGroup — используется для ожидания завершения группы goroutine. Позволяет главной goroutine дождаться, пока все запущенные завершатся.
-
Контекст (context.Context) — применяется для управления временем жизни goroutine, передачи сигналов отмены и дедлайнов.
-
Мьютексы и другие примитивы из пакета sync — для защиты общих ресурсов и предотвращения гонок данных.
Пример с WaitGroup и каналом:
var wg sync.WaitGroup
ch := make(chan int)
wg.Add(1)
go func() {
defer wg.Done()
ch <- 42 // отправляем значение
}()
go func() {
val := <-ch // получаем значение
fmt.Println(val)
}()
wg.Wait() // ждем завершения
Таким образом, комбинация каналов и синхронизационных примитивов позволяет эффективно управлять параллельным выполнением goroutine.