როგორ ხდება ოთხ გორუტინს ოთხ პროცესორის ბირთვზე განაწილება მათი დაწყებისას?
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-ებს სხვადასხვა ნაკადებზე, რომლებიც შეიძლება შესრულდეს სხვადასხვა ბირთვზე, რაც საშუალებას აძლევს მრავალპროცესორულ სისტემებს ეფექტურად გამოიყენოს. თუმცა, ზუსტი განაწილება დამოკიდებულია სისტემის დატვირთვაზე და შიდა დაგეგმვაზე.