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