Middle+
19
Как работают горутины и как синхронизировать их работу?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Горутины — это легковесные потоки выполнения в Go, которые позволяют запускать функции параллельно с минимальными затратами ресурсов.
Когда вызываешь go функция(), создаётся новая горутина, которая выполняется одновременно с основной.
Для синхронизации работы горутин часто используют:
- Каналы (channels) — позволяют передавать данные между горутинами и синхронизировать их работу.
- sync.WaitGroup — позволяет ждать завершения группы горутин.
- Mutex (sync.Mutex) — для защиты общих ресурсов от одновременного доступа.
Пример с 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() // ждём завершения
Таким образом, горутины позволяют эффективно использовать многопоточность, а каналы и другие механизмы обеспечивают безопасную и синхронизированную работу.