Junior — Middle
Kako se vrši balansiranje izvršavanja gorutina u programu?
sobes.tech АИ
Одговор од АИ
Балансирање извршавања 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-а.