Sobes.tech
Junior — Middle

Ինչպես է իրականացվում Tasks-ների հոսքային և հաջորդական մշակումը Go լեզվում?

sobes.tech AI

Պատասխան AI-ից

Go լեզվում առաջադրանքների համաժամանակյա մշակումը իրականացնում է goroutine-ները, որոնք թեթև թելեր են, որոնք սկսվում են go բանալի բառով։ Կարող եք սկսել goroutine՝ որպես ֆունկցիայի ասինխրոն իրականացման, և այն կաշխատի մյուս goroutine-ների հետ միասին՝ համաժամանակյա։

Համակարգային մշակումը պարզապես ֆունկցիաների կանչումն է առանց go, երբ առաջադրանքները կատարվում են մեկը մյուսի հետևից։

Համաժամանակյա մշակման օրինակ՝

package main

import (
    "fmt"
    "time"
)

func առաջադրանք(համար int) {
    fmt.Printf("Ամենամեծ առաջադրանքը %d սկսվեց\n", համար)
    time.Sleep(time.Second)
    fmt.Printf("Ամենամեծ առաջադրանքը %d ավարտվեց\n", համար)
}

func main() {
    for i := 1; i <= 3; i++ {
        go առաջադրանք(i) // սկսում ենք goroutine
    }
    time.Sleep(2 * time.Second) // սպասում ենք goroutine-ների ավարտին
}

Այս օրինակով երեք առաջադրանք սկսվում է համաժամանակյա։ Եթե հանենք go, առաջադրանքները կկատարվեն հերթականությամբ։

Goroutine-ների սինխրոնիզացիայի և կառավարման համար հաճախ օգտագործվում են ալիքներ (channels) և sync.WaitGroup։