Junior — Middle
Ako usporiadať a riadiť sled vykonávania vlákien?
sobes.tech AI
Odpoveď od AI
V jazyku Go sa na organizáciu a riadenie poradia vykonávania gorútin používajú niekoľko hlavných mechanizmov:
-
Kanály (channels) — umožňujú synchronizáciu gorútin, prenášaním dát medzi nimi. Gorutina, ktorá číta z kanála, bude čakať, kým iná gorutina nepošle dáta, čím sa zabezpečí poradie.
-
sync.WaitGroup — slúži na čakanie na dokončenie skupiny gorútin. Umožňuje počkať, kým všetky spustené gorutiny neskončia.
-
Mutex a ďalšie primitívy z balíka sync — na ochranu zdieľaných zdrojov a prevenciu závodov.
Príklad použitia kanálov na sekvenčné vykonávanie:
package main
import (
"fmt"
)
func worker(id int, done chan bool) {
fmt.Printf("Pracovník %d začal\n", id)
// simulácia práce
done <- true // signál o ukončení
}
func main() {
done := make(chan bool)
go worker(1, done)
<-done // čakáme na ukončenie pracovníka 1
go worker(2, done)
<-done // čakáme na ukončenie pracovníka 2
fmt.Println("Všetci pracovníci ukončili")
}
Týmto spôsobom je možné pomocou kanálov a synchronizácie riadiť poradie vykonávania gorútin.