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։