Sobes.tech
Junior — Middle

როგორ ხდება ოთხ გორუტინს ოთხ პროცესორის ბირთვზე განაწილება მათი დაწყებისას?

sobes.tech AI

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

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

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

მაგალითი:

runtime.GOMAXPROCS(4) // განსაზღვრავს ხელმისაწვდომი ნაკადების რაოდენობას 4-ზე

for i := 0; i < 4; i++ {
    go func(id int) {
        fmt.Printf("Goroutine %d დაიწყო\n", id)
        // სამუშაო
    }(i)
}

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