Cum se poate organiza și gestiona secvența de execuție a firelor?
sobes.tech AI
Răspuns de la AI
În Go, pentru organizarea și gestionarea secvenței de execuție a goroutine-urilor, se utilizează mai multe mecanisme principale:
-
Canale (channels) — permit sincronizarea goroutine-urilor, transmitând date între ele. O goroutine care citește dintr-un canal va aștepta până când o altă goroutine trimite date, asigurând ordinea.
-
sync.WaitGroup — este folosit pentru a aștepta finalizarea unui grup de goroutine-uri. Permite să aștepți până când toate goroutine-urile lansate se termină.
-
Mutex și alte primitive din pachetul sync — pentru protejarea resurselor comune și prevenirea condițiilor de cursă.
Exemplu de utilizare a canalelor pentru execuție secvențială:
package main
import (
"fmt"
)
func worker(id int, done chan bool) {
fmt.Printf("Worker %d a început\n", id)
// simulare de muncă
done <- true // semnal de finalizare
}
func main() {
done := make(chan bool)
go worker(1, done)
<-done // așteptăm finalizarea worker-ului 1
go worker(2, done)
<-done // așteptăm finalizarea worker-ului 2
fmt.Println("Toți worker-ii au terminat")
}
Astfel, folosind canale și sincronizare, se poate controla ordinea de execuție a goroutine-urilor.