Junior — Middle
Jak lze uspořádat a řízení sekvence provádění vláken?
sobes.tech AI
Odpověď od AI
V jazyce Go se pro organizaci a řízení sekvence provádění gorutin používá několik hlavních mechanismů:
-
Kanály (channels) — umožňují synchronizaci gorutin, přenášením dat mezi nimi. Gorutina, která čte z kanálu, bude čekat, dokud jiná gorutina nepošle data, což zajišťuje pořadí.
-
sync.WaitGroup — slouží k čekání na dokončení skupiny gorutin. Umožňuje počkat, až všechny spuštěné gorutiny dokončí.
-
Mutex a další primitivy z balíčku sync — pro ochranu sdílených zdrojů a prevenci závodů.
Příklad použití kanálů pro sekvenční provádění:
package main
import (
"fmt"
)
func worker(id int, done chan bool) {
fmt.Printf("Pracovník %d začal\n", id)
// simulace práce
done <- true // signál o dokončení
}
func main() {
done := make(chan bool)
go worker(1, done)
<-done // čekáme na dokončení pracovníka 1
go worker(2, done)
<-done // čekáme na dokončení pracovníka 2
fmt.Println("Všichni pracovníci dokončili")
}
Tímto způsobem lze pomocí kanálů a synchronizace řídit pořadí provádění gorutin.