Sobes.tech
Junior — Middle

Jak gorutiny komunikují s pamětí při běhu programů v Go?

sobes.tech AI

Odpověď od AI

Gorutiny v jazyce Go jsou lehké vlákna řízená běhovým prostředím Go. Každá gorutina má svůj vlastní zásobník paměti, který je zpočátku malý (přibližně 2 KB) a může se dynamicky rozšiřovat podle potřeby.

Interakce s pamětí probíhá následovně:

  • Všechny gorutiny sdílejí společný haldu (heap), kde jsou umístěny dynamicky alokované objekty.
  • Paměť na haldě spravuje sběrač odpadků, který sleduje odkazy ze všech gorutin.
  • Pro přenos dat mezi gorutinami se obvykle používají kanály (channels), které zajišťují bezpečnou výměnu bez závodů.
  • Zásobník každé gorutiny je izolovaný, což umožňuje efektivní přepínání mezi nimi bez velkých nákladů.

Příklad spuštění dvou gorutin, které si vyměňují data přes kanál:

func main() {
    ch := make(chan string)

    go func() {
        ch <- "ahoj z gorutiny"
    }()

    msg := <-ch
    fmt.Println(msg)
}

Tímto způsobem gorutiny sdílejí haldu, ale mají oddělené zásobníky, což zajišťuje efektivní a bezpečné paralelní provádění.