Sobes.tech
Junior — Middle

Kā tiek īstenots darbs ar kaudzi daudzprocesu vidē?

sobes.tech AI

Atbilde no AI

Go valodā darbs ar krātuvi (heap) daudzšūnu vidē tiek īstenots ar iebūvētu atkritumu savācēju un gorutīnu plānotāju. Krātuve ir atmiņas zona, kurā izvietoti dinamiskie objekti, un piekļuve tai var notikt no dažādām gorutīnām.

Lai droši strādātu ar krātuvi, Go izmanto:

  • Atkritumu savācēju (GC), kas automātiski atbrīvo neizmantoto atmiņu un novērš atmiņas noplūdes.
  • Muteksus un citus sinhronizācijas primitīvus (no sync pakotnes), ja nepieciešams skaidri aizsargāt piekļuvi kopīgajiem datiem, kas izvietoti krātuvē.

Piemērs: ja vairākas gorutīnas piekļūst kopīgai datu struktūrai, kas glabājas krātuvē, jāizmanto sync.Mutex, lai novērstu sacensību apstākļus:

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ādējādi, Go nodrošina drošu darbu ar krātuvi, izmantojot atkritumu savācēju, un sniedz instrumentus sinhronizācijai pēc vajadzības.