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.