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
mapilesync.Mutexveyasync.RWMutexkullanmaktan daha az verimli olabilir.
Ana metodlar:
Load(key any) (value any, ok bool): Anahtar ile ilişkili değeri yükler. Anahtar yoksafalsedö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 (trueveyafalse).Delete(key any): Anahtarın değerini siler.Range(f func(key, value any) bool): Rastgele sırayla haritadaki öğeleri yineleme.ffonksiyonu her anahtar-değer çifti için çağrılır. Eğerffalsedö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.