Junior — Middle
Kaip galima organizuoti ir valdyti srautų vykdymo seką?
sobes.tech AI
Atsakymas iš AI
Go kalboje, norint organizuoti ir valdyti gorutinių vykdymo seką, naudojami keli pagrindiniai mechanizmai:
-
Kanalai (channels) — leidžia sinchronizuoti gorutinas, perduodant duomenis tarp jų. Gorutina, skaitanti iš kanalo, lauks, kol kita gorutina nusiųs duomenis, tai užtikrina tvarką.
-
sync.WaitGroup — naudojamas laukti, kol baigsis gorutinos grupė. Leidžia laukti, kol visos paleistos gorutinos užbaigs darbą.
-
Mutex ir kiti primitives iš paketo sync — apsaugoti bendrus išteklius ir išvengti lenktynių sąlygų.
Pavyzdys, kaip naudoti kanalus sekciniam vykdymui:
package main
import (
"fmt"
)
func worker(id int, done chan bool) {
fmt.Printf("Darbininkas %d pradėjo\n", id)
// darbo imitacija
done <- true // pabaigos signalas
}
func main() {
done := make(chan bool)
go worker(1, done)
<-done // laukiame, kol baigsis darbininkas 1
go worker(2, done)
<-done // laukiame, kol baigsis darbininkas 2
fmt.Println("Visi darbininkai baigė darbą")
}
Taip, naudojant kanalus ir sinchronizaciją, galima valdyti gorutinių vykdymo tvarką.