Junior — Middle
Care este numărul maxim de goroutines care pot fi pornite simultan fără probleme semnificative pentru sistem?
sobes.tech AI
Răspuns de la AI
În Go, numărul maxim de goroutines care pot fi rulate simultan depinde de resursele sistemului (memorie RAM, timp CPU) și de natura sarcinilor pe care le execută. Teoretic, se pot lansa sute de mii sau chiar milioane de goroutines, deoarece sunt foarte ușor comparativ cu firele de execuție ale sistemului de operare.
Cu toate acestea, în practică:
- Dacă goroutines utilizează activ CPU-ul, un număr prea mare va duce la scăderea performanței din cauza schimbului de context.
- Dacă goroutines se blochează la operații de intrare/ieșire sau așteaptă evenimente, pot fi mult mai multe fără probleme majore.
De obicei, în aplicațiile reale, se pornesc de la câteva sute până la câteva mii de goroutines fără probleme. În cazul în care este nevoie de scalare, se recomandă profilarea aplicației și monitorizarea consumului de memorie și a încărcării CPU.
Exemplu de creare a unui număr mare de goroutines:
for i := 0; i < 100000; i++ {
go func(n int) {
// o muncă
fmt.Println(n)
}(i)
}