Sobes.tech
Junior — Middle

Məlumat saxlamaq üçün adi kart və sync.Map strukturu arasındakı fərqlər nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da adi kart (map) çoxluq təhlükəsiz deyil, buna görə eyni zamanda bir neçə goroutine-dən giriş edildikdə, məlumatları qorumaq üçün kilidlər (məsələn, sync.Mutex və ya sync.RWMutex) istifadə etmək lazımdır. Bu əlavə kod tələb edir və yüksək rəqabət şəraitində kilidləmələr və performansın azalmasına səbəb ola bilər.

sync.Map xüsusi və çoxluq təhlükəsiz məlumat strukturudur, tez-tez oxuma əməliyyatları və nadir yazma əməliyyatları üçün optimallaşdırılmışdır. O, daxili sinxronizasiya və optimizasiya mexanizmlərini həyata keçirir və kodda açıq kilidləmələrdən qaçmağa imkan verir.

Əsas fərqlər:

  • Çoxluq təhlükəsizliyi: sync.Map başlanğıcda çoxluq təhlükəsizdir, adi xəritə isə deyil.
  • Performans: sync.Map çoxlu paralel oxuma və az yazma ilə effektivdir; adi xəritə kilidlərlə aşağı rəqabətdə daha sürətli ola bilər.
  • API: sync.Map məhdud metodlar toplusuna malikdir (Load, Store, Delete, Range) və indeksləşmə ilə birbaşa giriş dəstəkləmir.

sync.Map istifadə nümunəsi:

var m sync.Map
m.Store("key", "value")
if val, ok := m.Load("key"); ok {
    fmt.Println(val)
}

Əgər sadə və giriş nəzarəti ilə xəritə lazımdırsa, mapsync.RWMutex istifadə edə bilərsiniz:

var (
    mu sync.RWMutex
    m  = make(map[string]string)
)

// Yazma
mu.Lock()
m["key"] = "value"
mu.Unlock()

// Oxuma
mu.RLock()
val := m["key"]
mu.RUnlock()