Middle+
Kuidas on üles ehitatud goroutines ja kui palju mälu nad stackis võtavad?
sobes.tech AI
Vastus AI-lt
Gorutina on kerge täitmisvoog, mida hallatakse Go täitmise keskkonna poolt. Erinevalt OS-voogudest multiplexeeritakse gorutinas väiksema OS-voogude arvuga. See tagab parema skaleeritavuse.
Põhipunktid:
- Ajastaja (Scheduler): Go täitmise keskkonnal on oma ajastaja (M:N scheduler), mis haldab gorutinasid (M) piiratud arv OS-voogudest (N).
- Mäluhaldur (Memory Manager): Halda gorutinate virnu ja nende kasvu/vähendamist.
- Kommunikatsioon: Gorutinasid suhtleb kanalite kaudu, pakkudes turvalist andmevahetust ilma blokeeringute/muteksideta enamikul juhtudel.
Gorutina virn:
- Alguses on gorutina virnad väikesed, tavaliselt 2 KB (enne Go 1.4 oli 4 KB).
- Virn on kasvav ja kahaneb. Virna üleujutamisel laieneb see automaatselt, ja mälu vabastamisel väheneb.
- See dünaamiline virna haldamine vähendab kulusid võrreldes fikseeritud suurte OS-virnadega.
Virna mälu kasutus:
- Gorutina loomise ajal võtab ta tavaliselt 2 KB mälu oma virnale.
- Mälu kasutus võib dünaamiliselt suureneda funktsioonikõnede ajal ja väheneda nende tagastamisel.
- Maksimaalne virna suurus on piiratud, kuid piisavalt suur enamikul ülesannetel (tavaliselt mõni MB).