Sobes.tech
Senior

როგორ გავხადოთ ორი worker()-ის შესრულება პარალელურად, ნაცვლად სერიული (6 წამი → 3 წამი)?

sobes.tech AI

პასუხი AI-სგან

Go ენაში ფუნქციების პარალელურად შესრულება შესაძლებელია goroutine-ების გამოყენებით. თუ გაქვთ ორი worker() ფუნქცია, რომლებიც ამჟამად სემანტიკურად იშლება და ჯამში 6 წამს გრძელდება, მათი გაშვება ცალკეულ goroutine-ებში, ისინი შესრულდება პარალელურად, და საერთო დრო დაახლოებით 3 წამი იქნება.

მაგალითი:

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

// ორივე goroutine-ის დასრულების დასაცავად გამოიყენეთ sync.WaitGroup
var wg sync.WaitGroup
wg.Add(2)
func() {
    defer wg.Done()
    worker()
}()
func() {
    defer wg.Done()
    worker()
}()
wg.Wait()

ამ გზით, ფუნქციების გაშვება goroutine-ებში და მათი სინქრონიზაცია WaitGroup-ის საშუალებით უზრუნველყოფს მათ პარალელურად შესრულებას.