Sobes.tech
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).