Sobes.tech
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 имкон медиҳад, ки иҷрои вазифаҳои параллелиро самаранок синхронӣ кард.