Sobes.tech
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-а.