Sobes.tech
Junior — Middle

Puteți explica mecanismul de funcționare al sync.Map în Go și în ce se diferențiază de hărțile standard?

sobes.tech AI

Răspuns de la AI

sync.Map în Go este o hartă (map) sigură pentru fire de execuție, concepută pentru acces concurent fără a fi nevoie să folosești mutex-uri (sync.Mutex) în mod explicit. Spre deosebire de o hartă obișnuită map[K]V, care nu este sigură pentru fire multiple și necesită sincronizare externă, sync.Map implementează mecanisme interne pentru citire și scriere sigură din mai multe goroutines.

Caracteristici ale sync.Map:

  • Optimizată pentru scenarii cu citiri frecvente și scrieri rare.
  • Utilizează structuri și algoritmi interni (de exemplu, copierea la scriere) pentru a minimiza blocările.
  • Oferă metode precum Load, Store, LoadOrStore, Delete și Range.

Exemplu de utilizare:

var m sync.Map

// Stochează o valoare
m.Store("key", "value")

// Obține o valoare
if val, ok := m.Load("key"); ok {
    fmt.Println(val)
}

// Șterge o valoare
m.Delete("key")

// Iterează peste elemente
m.Range(func(k, v interface{}) bool {
    fmt.Println(k, v)
    return true // continuă
})

Astfel, sync.Map este util atunci când trebuie să lucrezi rapid și sigur cu o hartă partajată într-un mediu multi-thread, fără a-ți face griji despre mutex-uri. Cu toate acestea, pentru scenarii cu scrieri frecvente și logică complexă, este mai bine să folosești hărți normale cu sincronizare explicită.