Junior — Middle
Proqramda goroutine-lərin icrasının balanslaşdırılması necə həyata keçirilir?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da goroutine-lərin icrasını balanslaşdırmaq üçün daxili vaxtlayıcı (scheduler) istifadə olunur. Scheduler mövcud sistem axınları (OS threads) arasında M:N modelindən istifadə edərək goroutine-ləri paylayır; burada M — axınların sayı, N isə goroutine-lərin sayı.
Əsas nöqtələr:
- Çox sayda goroutine mövcuddur, onlar yüngüldür və əməliyyat sisteminin iştirakı olmadan keçid edirlər.
- Scheduler kooperativ çoxlu tapşırıq algoritmlərinə bənzər algoritmlərdən istifadə edir, lakin kəsilmə imkanı ilə.
- Goroutine-lərə axınlar təyin olunur və əgər goroutine bloklansa (məsələn, giriş-çıxışda), scheduler başqa birinə keçir.
Nümunə:
func main() {
for i := 0; i < 10; i++ {
go func(id int) {
fmt.Println("Goroutine", id)
}(i)
}
time.Sleep(time.Second) // Goroutine-lərin tamamlanmasını gözləyir
}
Burada, scheduler mövcud axınlar arasında 10 goroutine paylayacaq, balanslaşdırma və CPU-dan səmərəli istifadə təmin ediləcək.