Sobes.tech
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-ҳо анҷом ёбанд, пеш аз баромадан аз барнома.