Sobes.tech
Junior — Middle

Ce metode sunt utilizate pentru controlul și coordonarea muncii goroutine-urilor în Go?

sobes.tech AI

Răspuns de la AI

În Go, controlul și coordonarea goroutine-urilor se realizează în mai multe moduri:

  • Canale (channels) — mecanismul principal pentru schimbul de date și sincronizare între goroutine-uri. Canalele permit transmiterea sigură a valorilor și blochează expeditorul sau receptorul până când sunt gata.

  • sync.WaitGroup — este folosit pentru a aștepta finalizarea unui grup de goroutine-uri. Permite goroutine-ului principal să aștepte până când toate goroutine-urile lansate se termină.

  • Context (context.Context) — este utilizat pentru a gestiona durata de viață a goroutine-urilor, pentru a transmite semnale de anulare și limite de timp.

  • Mutexuri și alte primitive din pachetul sync — pentru protejarea resurselor comune și prevenirea condițiilor de cursă.

Exemplu cu WaitGroup și canal:

var wg sync.WaitGroup
ch := make(chan int)

wg.Add(1)
go func() {
    defer wg.Done()
    ch <- 42 // transmiterea valorii
}()

go func() {
    val := <-ch // primirea valorii
    fmt.Println(val)
}()

wg.Wait() // așteaptă finalizarea

Astfel, combinația de canale și primitive de sincronizare permite gestionarea eficientă a execuției paralele a goroutine-urilor.