Junior — Middle
Go программасында бир нече параллелдик тапшырмаларынын аяктоосун синхрондуу күтүүнү кантип ишке ашыруу керек?
sobes.tech AI
AIден жооп
Go тилинде, бир нече параллелдик тапшырмандардын бүтүшүн синхрондуу күтүү үчүн, адатта, sync.WaitGroup колдонулат. Бул бир нече goroutine'лерди ишке киргизүүгө жана алардын аяктоосун күтүүгө мүмкүндүк берет.
Мисал:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // WaitGroup'ке тапшырманын аяктаганы тууралуу кабар берет
fmt.Printf("Жумушчу %d башталды\n", id)
// иштин имитациясы
// time.Sleep(time.Second)
fmt.Printf("Жумушчу %d аяктады\n", id)
}
func main() {
var wg sync.WaitGroup
numWorkers := 3
wg.Add(numWorkers) // тапшырмалардын санын белгилөө
for i := 1; i <= numWorkers; i++ {
go worker(i, &wg)
}
wg.Wait() // бардык goroutine'лердин аяктоосун күтөт
fmt.Println("Бардык жумушчулар аяктады")
}
Мындайча айтканда, WaitGroup параллелдик тапшырмаларды эффективдүү синхрондоштуруу мүмкүнчүлүгүн берет.