Junior — Middle
Kā organizēt un pārvaldīt pavedienu izpildes secību?
sobes.tech AI
Atbilde no AI
Go valodā, lai organizētu un pārvaldītu gorutīnu izpildes secību, tiek izmantoti vairāki galvenie mehānismi:
-
Kanāli (channels) — ļauj sinhronizēt gorutīnus, pārraidot datus starp tām. Gorutīna, kas lasa no kanāla, gaidīs, kamēr cita gorutīna nosūtīs datus, nodrošinot secību.
-
sync.WaitGroup — tiek izmantots, lai gaidītu, kamēr grupa gorutīnu pabeigs darbu. Tas ļauj gaidīt, kamēr visas uzsāktās gorutīnas beigs darbu.
-
Mutex un citi primitives no pakotnes sync — aizsargāt koplietotos resursus un novērst sacensību apstākļus.
Piemērs, kā izmantot kanālus secīgas izpildes nodrošināšanai:
package main
import (
"fmt"
)
func worker(id int, done chan bool) {
fmt.Printf("Darbinieks %d sāka\n", id)
// darba imitācija
done <- true // pabeigšanas signāls
}
func main() {
done := make(chan bool)
go worker(1, done)
<-done // gaidām, kamēr darbinieks 1 pabeigs
go worker(2, done)
<-done // gaidām, kamēr darbinieks 2 pabeigs
fmt.Println("Visi darbinieki pabeidza darbu")
}
Šādā veidā, izmantojot kanālus un sinhronizāciju, var pārvaldīt gorutīnu izpildes secību.