Junior — Middle
მოდის რა შემთხვევებში გორუტინებში არსებული დავალებები შესრულების დაგეგმვის საერთო რიგში იდება?
sobes.tech AI
პასუხი AI-სგან
Go-ში დავალებები (goroutine-ები) იდებიან საერთო შესრულების გრაფაში (run queue) შემდეგ შემთხვევებში:
- როდესაც goroutine შეიქმნება
go-ს გამოყენებით და მზად არის შესრულებისთვის, ის იდება გრაფის რიგში. - თუ goroutine ბლოკდება (მაგალითად, შეტანის/გამოტანის ოპერაციებზე, არხებზე ან სინქრონიზაციაზე) და შემდეგ განბლოკდება, ის დაბრუნდება რიგში.
- მიმდინარე goroutine-ის დასრულების შემდეგ, გრაფის მფლობელი აირჩევს შემდეგს რიგიდან.
Go-ის გრაფი იყენებს M:N მოდელს, სადაც M — სისტემის ნაკადები, N — goroutine-ები. ბევრი goroutine-ია, რომლებიც გადანაწილებულია ნაკადებზე რიგების მეშვეობით. გრაფის რიგი არის სტრუქტურა, სადაც ინახება შესრულებისთვის მზად goroutine-ები.
მაგალითი:
func main() {
go func() {
fmt.Println("Goroutine დაიწყო")
}()
time.Sleep(time.Second) // ველით, რომ goroutine შესრულდება
}
აქ, შექმნის შემდეგ, goroutine-ი იდება გრაფის რიგში შესრულებისთვის.