Sobes.tech
Junior — Middle

გორუტინებთან მუშაობის კონტექსტში ბლოკირებადი ზარები რა არის და როგორ ახდენენ გავლენას პროგრამის შესრულებაზე

sobes.tech AI

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

ბლოკირებადი ზარები — ეს ოპერაციებია, რომლებიც შესრულებისას აჩერებენ (ბლოკავენ) მიმდინარე გორუტინას მანამ, სანამ ეს ოპერაცია არ დასრულდება. Go-ს გორუტინების კონტექსტში, თუ გორუტინა ახორციელებს ბლოკირებადი ზარს, ის არ გააგრძელებს შესრულებას მანამ, სანამ ზარი არ დასრულდება.

ეს გავლენას ახდენს პროგრამაზე, რადგან თუ ბლოკირებადი ზარი შესრულდება მთავარი გორუტინაში, ის მოელიებს, რაც შეიძლება გამოიწვიოს დაგვიანებებს ან გაყინვას. თუმცა, რადგან გორუტინები მსუბუქია და ბევრი შეიძლება დაიწყოს, ერთ გორუტინაში ბლოკირებადი ზარები არ აფერხებს სხვა გორუტინების შესრულებას.

ბლოკირებადი ზარის მაგალითი — არხიდან წაკითხვა, როდესაც მონაცემები არ არის ხელმისაწვდომი:

ch := make(chan int)

func main() {
    go func() {
        ch <- 42 // მნიშვნელობის გაგზავნა
    }()
    val := <-ch // ბლოკირებადი ზარი, ელოდება მნიშვნელობის მიღებას
    fmt.Println(val)
}

აქ, არხიდან წაკითხვა ბლოკავს main გორუტინას მანამ, სანამ მნიშვნელობა არ მივა.