Junior — Middle
Kuidas rakendada sünkroonset ootamist mitme paralleelüles ülesande lõpetamiseks Go programmis?
sobes.tech AI
Vastus AI-lt
Go keeles kasutatakse tavaliselt sync.WaitGroup-i, et sünkronselt oodata mitme paralleelse ülesande lõpetamist. See võimaldab käivitada mitu gorutini ja oodata nende lõpetamist.
Näide:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Annab teada WaitGroup-ile, et ülesanne on lõpetatud
fmt.Printf("Tööline %d alustas\n", id)
// töö simulatsioon
// time.Sleep(time.Second)
fmt.Printf("Tööline %d lõpetas\n", id)
}
func main() {
var wg sync.WaitGroup
numWorkers := 3
wg.Add(numWorkers) // Määrab ülesannete arvu
for i := 1; i <= numWorkers; i++ {
go worker(i, &wg)
}
wg.Wait() // Ootab, kuni kõik gorutined on lõpetanud
fmt.Println("Kõik töömehed on lõpetanud")
}
Nii võimaldab WaitGroup tõhusalt sünkroneerida paralleelsete ülesannete täitmist.