Middle+
Cum sunt structurate goroutine-urile și câtă memorie ocupă în stivă?
sobes.tech AI
Răspuns de la AI
Goroutine este un fir de execuție ușor, gestionat de mediul de execuție Go (runtime). Acestea sunt multiplexate pe un număr mai mic de fire de sistem (pool de fire).
Componente principale:
- Stivă: Fiecare goroutine are o stivă separată și extensibilă. Inițial mică (16KB cu Go 1.4+, anterior 8KB), poate crește sau scădea după necesitate.
- Planificatorul Go: implementează modelul M:N (M goroutine pe N fire de sistem). Se ocupă cu comutarea între goroutine-uri pe firele de sistem disponibile. Comutarea are loc în operații blocante (intrare/ieșire, așteptare pe canal) sau prin apel explicit
runtime.Gosched(). - Context: Conține un pointer către codul mașină pentru execuție, un pointer către stivă și alte metadate necesare planificatorului.
Dimensiunea inițială a stivei goroutine-ului de la Go 1.4 este de 16KB. Această dimensiune nu este fixă și poate varia dinamic.