Sobes.tech
Junior — Middle

რა ხდება გორუტინასთან, როდესაც ის რაიმე პროცესის ან ოპერაციის შესრულებისას ბლოკირდება?

sobes.tech AI

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

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

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

მაგალითი:

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

ამ მაგალითში, goroutine ბლოკდება არხიდან წაკითხვაზე, მაგრამ დაგეგმვა საშუალებას აძლევს სხვა goroutine-ებს მუშაობა, სანამ ის ელოდება.