Sobes.tech
Middle+

რა არის გორუტინები და როგორ არის ისინი შიგნით მოწყობილი?

sobes.tech AI

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

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

Goroutine-ის შიგნით, ის წარმოდგენილია სტრუქტურით g (goroutine), რომელიც შეიცავს მდგომარეობას, სტეკს, რეგისტრარებს და სხვა ინფორმაციას. Go-ის სქედულერი (scheduler) მართავს goroutine-ებს შორის გადართვას M:N მოდელით, სადაც M არის სისტემური ნაკადები (OS ნაკადები), ხოლო N არის goroutine-ები.

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

Goroutine-ის შექმნის მაგალითი:

func sayHello() {
    fmt.Println("გამარჯობა goroutine-დან")
}

func main() {
    go sayHello() // goroutine-ის დაწყება
    time.Sleep(time.Second) // დრო მიცემა goroutine-ის შესრულებისთვის
}