Sobes.tech
Middle

sync.Map paketi hakkında ne biliyorsun?

sobes.tech yapay zeka

AI'dan gelen yanıt

sync.Map paketi, eşzamanlı güvenli bir karma tablosu sağlar. Anahtarların çoğunlukla okunduğu ve daha az yazıldığı durumlar için optimize edilmiştir.

Ana özellikler:

  • Eşzamanlı Güvenlik: Açık kilitler olmadan birden fazla goroutine'den güvenli erişim sağlar.
  • Okuma için optimize edilmiştir: Her anahtarın ilk okunmasında, sadece okunabilir kopyası önbelleğe alınır. Bu önbellekten sonraki okumalar kilit gerektirmez.
  • Dinamik silme: Silinen öğeler önce silinmiş olarak işaretlenir ve gerçek silme, yazma sırasında kilitleri en aza indirmek için belirli koşullar altında gerçekleşir.
  • Len() metodu yok: Len() metodunun desteği, eşzamanlı güvenli uygulamayı karmaşık ve maliyetli hale getirirdi.
  • Sürekli değişen veriler için uygun değil: Sık yazma ve silme işlemleri, normal map ile sync.Mutex veya sync.RWMutex kullanmaktan daha az verimli olabilir.

Ana metodlar:

  • Load(key any) (value any, ok bool): Anahtar ile ilişkili değeri yükler. Anahtar yoksa false döner.
  • Store(key, value any): Anahtar için değer kaydeder. Ekleme veya güncelleme için kullanılabilir.
  • LoadOrStore(key any, value any) (actual any, loaded bool): Anahtar zaten varsa ilişkili değeri yükler. Aksi takdirde, belirtilen değeri kaydeder. Gerçek değeri ve değerin yüklendiğine dair bayrağı döner (true veya false).
  • Delete(key any): Anahtarın değerini siler.
  • Range(f func(key, value any) bool): Rastgele sırayla haritadaki öğeleri yineleme. f fonksiyonu her anahtar-değer çifti için çağrılır. Eğer f false dönerse, yineleme durur.

Kullanım örneği:

import "sync"

var m sync.Map

func process(key string, value int) {
	m.Store(key, value)

	v, ok := m.Load(key)
	if ok {
		// v ile işlem yap
	}

	m.Range(func(key, value any) bool {
		// Öğeleri işle
		return true // Yinelemeye devam et
	})
}

Genel olarak, sync.Map, eşzamanlı okuma işlemlerinin yazma ve silme işlemlerine göre önemli ölçüde üstün olduğu durumlar için iyi bir seçimdir. Aksi takdirde, map ile sync.Mutex veya sync.RWMutex kullanmak daha uygun olabilir.