Sobes.tech
Senior

Kaip padaryti, kad dviejų worker() vykdymas būtų lygiagrečiai, o ne eilės tvarka (6 sekundės → 3 sekundės)?

sobes.tech AI

Atsakymas iš AI

Go kalboje funkcijų vykdymą paraleliai galima atlikti naudojant goroutines. Jei turite dvi funkcijas worker(), kurios šiuo metu vykdomos sekantės ir iš viso užtrunka 6 sekundes, jas paleidus atskiruose goroutine, jos vykdomos paraleliai, ir bendras laikas sumažės maždaug iki 3 sekundžių.

Pavyzdys:

func() {
    worker()
}()
func() {
    worker()
}()

// Norint palaukti, kol abi goroutine baigs, naudokite sync.WaitGroup
var wg sync.WaitGroup
wg.Add(2)
func() {
    defer wg.Done()
    worker()
}()
func() {
    defer wg.Done()
    worker()
}()
wg.Wait()

Taip paleidus funkcijas goroutine-ose ir sinchronizuojant per WaitGroup, jos vykdomos paraleliai.