Junior — Middle
Как се извършва балансирането на изпълнението на горутините в програма?
sobes.tech AI
Отговор от AI
Балансирането на изпълнението на goroutine в Go се осъществява от планировчика (scheduler), вграден в runtime. Планировчикът разпределя goroutine-ите между наличните системни нишки (OS threads), използвайки модел M:N, където M е броят на нишките, а N — броят на goroutine-ите.
Основни точки:
- Има много goroutine-и, те са леки и се превключват без участие на ОС.
- Планировчикът използва алгоритми, подобни на кооперативната многозадачност, но с възможност за прекъсване.
- Goroutine-ите са назначени на нишки, и ако една goroutine блокира (например, при вход/изход), планировчикът превключва към друга.
Пример:
func main() {
for i := 0; i < 10; i++ {
go func(id int) {
fmt.Println("Goroutine", id)
}(i)
}
time.Sleep(time.Second) // Изчаква завършването на goroutine-ите
}
Тук планировчикът ще разпредели 10 goroutine-и между наличните нишки, осигурявайки баланс и ефективно използване на CPU.