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 დასრულდა")
}
ამიტომ, შეზღუდვა უფრო პრაქტიკულია, ვიდრე სისტემური.