Sobes.tech
Junior — Middle

Ինչպե՞ս է Golang-ում ապահովվում գործառույթների և սինխրոնիզացիայի աշխատանքը:

sobes.tech AI

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

Go լեզվում աշխատանքային հոսքերի հետ աշխատելու համար օգտագործվում են goroutines-ներ՝ թեթև հոսքեր, որոնք կառավարում է Go-ի ռանթայմը։ Goroutines-ները սկսվում են go բանալի բառով՝ ֆունկցիայի կանչից առաջ, ինչը թույլ է տալիս նրանց աշխատել ասինխրոն։

Goroutines-ների սինխրոնիզացման համար օգտագործվում են ալիքներ (channels) և sync փաթեթի primitives (օրինակ, Mutex, WaitGroup)։ Ալիքները ապահովում են տվյալների անվտանգ փոխանակում goroutines-ների միջև և թույլ են տալիս նրանց սինխրոնիզացնել։

Goroutines և ալիքների օգտագործման օրինակ՝

package main

import (
    "fmt"
    "time"
)

func worker(ch chan string) {
    time.Sleep(time.Second)
    ch <- "պատրաստ"
}

func main() {
    ch := make(chan string)
    go worker(ch)
    msg := <-ch
    fmt.Println("Goroutine-ի աշխատանքը՝", msg)
}

Այստեղ, հիմնական goroutine-ը սկսում է worker-ին առանձին goroutine-ում, որը հետո մի փոքր ուշացումից հետո ուղարկում է հաղորդագրություն ալիքով։ Հիմնական goroutine-ը սպասում է հաղորդագրության ստացմանը ալիքից, ինչը ապահովում է սինխրոնիզացիան։