Sobes.tech
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-ი იდება გრაფის რიგში შესრულებისთვის.