Junior — Middle
Маслиҳат диҳед, ки намунаи истифодаи механизмии интизории гурӯҳҳоро дар барномасозӣ нишон диҳед?
sobes.tech AI
Ҷавоб аз AI
Дар Go механизм интизорӣ гурӯҳҳо (sync.WaitGroup) барои интизор шудан ба анҷоми гурӯҳи goroutines истифода мешавад. Ин барои вақте ки шумо чанд вазифаи параллелро оғоз мекунед ва интизор ҳастед, ки онҳо ба охир расанд, қулай аст.
Масалан:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Маъзур мекунад, ки кор анҷом ёфтааст
fmt.Printf("Корманди %d оғоз ёфт\n", id)
// Ин ҷо ҳар коре метавонад бошад
fmt.Printf("Корманди %d анҷом ёфт\n", id)
}
func main() {
var wg sync.WaitGroup
numWorkers := 3
wg.Add(numWorkers) // Миқдори goroutine-ҳои интизориро муқаррар мекунад
for i := 1; i <= numWorkers; i++ {
go worker(i, &wg)
}
wg.Wait() // интизор мешавад, ки ҳама goroutine-ҳо Done()-ро занг зананд
fmt.Println("Ҳамаи кормандон анҷом ёфт")
}
Дар ин мисол, main 3 goroutine-ро оғоз мекунад, ҳар яке функсияи worker-ро иҷро мекунад. WaitGroup ба main имкон медиҳад, ки интизор шавад, то ҳама goroutine-ҳо анҷом ёбанд, пеш аз баромадан аз барнома.