Sobes.tech
Junior — Middle

Kā īstenot sinhronu gaidīšanu vairāku paralēlo uzdevumu pabeigšanai Go programmā?

sobes.tech AI

Atbilde no AI

Go valodā parasti izmanto sync.WaitGroup, lai sinhroni veiktu vairākus paralēlus uzdevumus. Tas ļauj palaist vairākas gorutīnas un gaidīt to pabeigšanu.

Piemērs:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done() // Informē WaitGroup, ka uzdevums ir pabeigts
    fmt.Printf("Darbinieks %d sāka\n", id)
    // darba imitācija
    // time.Sleep(time.Second)
    fmt.Printf("Darbinieks %d pabeidza\n", id)
}

func main() {
    var wg sync.WaitGroup
    numWorkers := 3

    wg.Add(numWorkers) // Uzstāda uzdevumu skaitu

    for i := 1; i <= numWorkers; i++ {
        go worker(i, &wg)
    }

    wg.Wait() // Gaida, kamēr visas gorutīnas pabeigsies
    fmt.Println("Visi darbinieki pabeidza")
}

Tādējādi WaitGroup ļauj efektīvi sinhronizēt paralēlo uzdevumu izpildi.