Middle+
Hogyan épülnek fel a goroutine-ok, és mennyi memóriát foglalnak a veremben?
sobes.tech MI
Válasz az MI-től
A goroutine egy könnyűsúlyú végrehajtási szál, amelyet a Go futásideje (runtime) kezel. Ezek multiplexálva vannak kevesebb rendszer szálon (szálmedence).
Fő összetevők:
- Verem: Minden goroutine-nak külön, bővíthető veremmel rendelkezik. Kezdetben kicsi (16KB a Go 1.4+ verzióval, korábban 8KB), és szükség szerint növelhető vagy csökkenthető.
- Go ütemező: Az M:N modell megvalósítása (M goroutine N rendszer szálon). Feladata a goroutine-ok közötti váltás a rendelkezésre álló rendszer szálakon. A váltás blokkoló műveletek (be- és kimenet, csatornán való várakozás) vagy expliciten meghívott
runtime.Gosched()során történik. - Környezet: Tartalmaz egy mutatót a végrehajtandó gépi kódra, egy mutatót a veremre és más metaadatokat, amelyekre a ütemezőnek szüksége van.
A goroutine kezdeti veremmérete a Go 1.4 óta 16KB. Ez a méret nem fix, és dinamikusan változhat.