Sobes.tech
Middle+
21

Как работают горутины и как синхронизировать их работу?

Companies where asked
Бюро 1440Бюро 1440

Answer from AI

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() // ждём завершения

Таким образом, горутины позволяют эффективно использовать многопоточность, а каналы и другие механизмы обеспечивают безопасную и синхронизированную работу.