Sobes.tech
Junior — Middle

Jak je implementována práce s frontou v prostředí s více vlákny?

sobes.tech AI

Odpověď od AI

V Go je práce s haldou (heap) v prostředí s více vlákny pomocí vestavěného sběrače odpadků a plánovače gorutin. Haldy je oblast paměti, kde jsou umístěny dynamické objekty, a k ní může přistupovat více gorutin.

Pro bezpečnou práci s haldou Go používá:

  • Sběrač odpadků (GC), který automaticky uvolňuje nepoužívanou paměť a zabraňuje únikům.
  • Mutexy a další primitives synchronizace (z balíčku sync), pokud je potřeba explicitně chránit přístup ke sdíleným datům uloženým v haldě.

Příklad: pokud několik gorutin přistupuje ke společné struktuře dat uložené v haldě, je třeba použít sync.Mutex, aby se zabránilo závodům:

var mu sync.Mutex
var sharedData = make(map[string]int)

func writeData(key string, value int) {
    mu.Lock()
    defer mu.Unlock()
    sharedData[key] = value
}

func readData(key string) int {
    mu.Lock()
    defer mu.Unlock()
    return sharedData[key]
}

Tímto způsobem Go zajišťuje bezpečnost práce s haldou pomocí sběrače odpadků a poskytuje nástroje pro synchronizaci podle potřeby.