Sobes.tech
Junior — Middle

Kuidas rakendatakse töö virnaga mitme niidiga keskkonnas?

sobes.tech AI

Vastus AI-lt

Go keeles mitmekeermelises keskkonnas töö heap-iga realiseeritakse sisseehitatud prügikoguja ja goroutine'i ajastaja abil. Heap on mäluala, kuhu paigutatakse dünaamilised objektid ning sellele pääseb ligi erinevatest goroutinest.

Heap-iga turvalise töö tagamiseks kasutab Go:

  • Prügikoguja (GC), mis vabastab automaatselt kasutamata mälu ning ennetab mälulekkeid.
  • Mutex'eid ja teisi sünkroniseerimise primitiive (sync paketist), kui on vaja selgelt kaitsta jagatud andmeid, mis asuvad heap'is.

Näide: kui mitu goroutin'it pääsevad ligi ühisele andmestruktuurile, mis asub heap'is, tuleb kasutada sync.Mutex, et vältida võistlusolukordi:

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]
}

Sellisel viisil tagab Go prügikoguja ja sünkroniseerimisvahendite abil heap-iga töötamise turvalisuse ning pakub tööriistu vajadusel sünkroniseerimiseks.