Sobes.tech
Junior — Middle

Ի՞նչ է առավելագույն քանակը գորուտինների, որոնք կարող են միաժամանակ գործարկվել ծրագրում:

sobes.tech AI

Պատասխան AI-ից

Go-ում չկա խիստ սահմանափակում միաժամանակ գործարկվող goroutines-ի առավելագույն թվի վրա: Теоретически, դրանք կարող են լինել շատ — տասնյակ, հարյուրավոր և նույնիսկ միլիոնավոր, կախված համակարգի ռեսուրսներից (հիշողություն, CPU):

Goroutines-ը շատ թեթև են համեմատած օպերացիոն համակարգի թելերի հետ, քանի որ օգտագործում են դինամիկ ստեկ, որը մեծանում է անհրաժեշտության դեպքում:

Սակայն, գործնական սահմանափակումը կախված է՝

  • հասանելի հիշողության քանակից (յուրաքանչյուր goroutine զբաղեցնում է առնվազն մի քանի կիլոբայթ):
  • ծրագրի տրամաբանությունից և goroutines-ների միջև սինխրոնիզացիայից:
  • Go պլանավորողի բեռից:

Նմուշ՝ մեծ թվով goroutines գործարկելու:

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("Բոլոր goroutines-ները ավարտվեցին")
}

Այսպիսով, սահմանափակումը ավելի շատ գործնական է, քան համակարգային։