Junior — Middle
Kako organizovati i upravljati redosled izvršavanja niti?
sobes.tech АИ
Одговор од АИ
U Go jeziku, za organizaciju i upravljanje redosledom izvršavanja gorutina koriste se nekoliko osnovnih mehanizama:
-
Kanali (channels) — omogućavaju sinhronizaciju gorutina, prenoseći podatke između njih. Gorutina koja čita iz kanala će čekati dok druga gorutina ne pošalje podatke, čime se obezbeđuje redosled.
-
sync.WaitGroup — koristi se za čekanje završetka grupe gorutina. Omogućava da se sačeka dok sve pokrenute gorutine ne završe.
-
Mutex i drugi primitivni iz paketa sync — za zaštitu zajedničkih resursa i sprečavanje trka.
Primer korišćenja kanala za sekvencijalno izvršavanje:
package main
import (
"fmt"
)
func worker(id int, done chan bool) {
fmt.Printf("Radnik %d je počeo\n", id)
// simulacija rada
done <- true // signal o završetku
}
func main() {
done := make(chan bool)
go worker(1, done)
<-done // čekamo završetak radnika 1
go worker(2, done)
<-done // čekamo završetak radnika 2
fmt.Println("Svi radnici su završili")
}
Na ovaj način, koristeći kanale i sinhronizaciju, može se upravljati redosledom izvršavanja gorutina.