Sobes.tech
Junior — Middle

Какъв е максималният брой горутини, които могат да бъдат стартирани едновременно в приложение?

sobes.tech AI

Отговор от AI

В Go няма строга граница за максималния брой горутини, които могат да бъдат изпълнявани едновременно. Теоретично, могат да бъдат стартирани много — десетки, стотици и дори милиони, в зависимост от ресурсите на системата (памет, CPU).

Горутините са много леки в сравнение с нишките на ОС, тъй като използват динамичен стек, който расте при необходимост.

Практическото ограничение обаче зависи от:

  • наличното количество памет (всяка горутина заема поне няколко килобайта).
  • логиката на приложението и синхронизацията между горутините.
  • натоварването върху планировчика на Go.

Пример за стартиране на голям брой горутини:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    const n = 100000
    wg.Add(n)

    for i := 0; i < n; i++ {
        go func(i int) {
            defer wg.Done()
            // проста работа
            _ = i * 2
        }(i)
    }

    wg.Wait()
    fmt.Println("Всички горутини са завършили")
}

Следователно, ограничението е по-скоро практическо, отколкото системно.