Sobes.tech
Junior — Middle

რამდენი გორუტინი შეიძლება ერთდროულად დაიწყოს პროგრამაში?

sobes.tech AI

პასუხი AI-სგან

Go-ში არ არსებობს მკაცრი შეზღუდვა ერთდროულად გაშვებული goroutine-ების მაქსიმალურ რაოდენობაზე. თეორიულად, მათ შეიძლება იყოს ძალიან ბევრი — ათეულები, ასეულები და ზოგჯერ მილიონები, სისტემის რესურსებზე (მეხსიერება, CPU) დამოკიდებული.

Goroutine-ები ძალიან მსუბუქია ოპერაციული სისტემის ნაკადებთან შედარებით, რადგან იყენებენ დინამიკურ სტეკს, რომელიც საჭიროების მიხედვით იზრდება.

თუმცა, პრაქტიკული შეზღუდვა დამოკიდებულია:

  • ხელმისაწვდომ მეხსიერების რაოდენობაზე (ყოველი goroutine იკავებს მინიმუმ რამდენიმე კილობაიტს).
  • პროგრამის ლოგიკასა და goroutine-ების შორის სინქრონიზაციაზე.
  • Go-ის დაგეგმვის პროცესზე.

მრავალ goroutine-ის გაშვების მაგალითი:

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("ყველა goroutine დასრულდა")
}

ამიტომ, შეზღუდვა უფრო პრაქტიკულია, ვიდრე სისტემური.