Sobes.tech
Junior — Middle

Na koji način se vrši kontrola i koordinacija rada goroutine u Go?

sobes.tech АИ

Одговор од АИ

У Go, контрола и координацијата на goroutine се реализираат на неколку начини:

  • Канали (channels) — главниот механизам за размена на податоци и синхронизација меѓу goroutine-ите. Каналите овозможуваат безбедно пренесување на вредности и блокираат испраќачот или примачот додека не бидат подготвени.

  • sync.WaitGroup — се користи за чекање на завршувањето на група goroutine-и. Ова дозволува главната 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-ите.