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-ებს მუშაობა, სანამ ის ელოდება.