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 параллелдик тапшырмаларды эффективдүү синхрондоштуруу мүмкүнчүлүгүн берет.