RW Mutex va oddiy mutex o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
sync.RWMutex bir çox goroutine-ın eyni zamanda məlumatları oxumasına imkan verir, lakin yalnız bir goroutine məlumatları yaza bilər. sync.Mutex digər goroutine-lərin kilidi əldə etməsini bloklayır (oxuma və ya yazma üçün), ilk goroutine kilidi azad edənə qədər.
-
sync.Mutex: Eksklüziv kilid. Ya kilidlənmişdir, ya da deyil. Yalnız bir goroutine hər zaman mutex-i saxlaya bilər. Tez-tez və ya oxşar müddətə malik oxuma və yazma əməliyyatları üçün uyğundur.// Mutex istifadə nümunəsi var mu sync.Mutex var counter int func increment() { mu.Lock() counter++ mu.Unlock() } -
sync.RWMutex: Oxuma və yazma üçün kilid. Bir çox goroutine-ın eyni zamanda oxumağa malik olmasına imkan verir, lakin yazma üçün kilid eksklüzivdir. Yazma üçün kilid tutan goroutine digər yazma və oxuma əməliyyatlarını bloklayır. Oxuma üçün kilid tutan goroutine-lər yazma əməliyyatlarını bloklayır, lakin digər oxuma əməliyyatlarını bloklamır. Oxuma əməliyyatları çox daha tez-tez baş verdiyindən uyğundur.// RWMutex istifadə nümunəsi var rwmu sync.RWMutex var data map[string]string = make(map[string]string) func readData(key string) string { rwmu.RLock() // Oxuma üçün kilid alınır value := data[key] rwmu.RUnlock() // Oxuma üçün kilid azad edilir return value } func writeData(key, value string) { rwmu.Lock() // Yazma üçün kilid alınır data[key] = value rwmu.Unlock() // Yazma üçün kilid azad edilir }
Əsas fərqlər aşağıdakı cədvəldə ümumiləşdirilə bilər:
| Xüsusiyyət | sync.Mutex |
sync.RWMutex |
|---|---|---|
| Kilid növü | Eksklüziv (oxuma/yazma) | Paylaşılan (oxuma) + eksklüziv (yazma) |
| Eyni zamanda giriş | Bir goroutine | Bir çox goroutine oxuma, bir goroutine yazma |
| Oxuma üçün kilid metodu | Lock() |
RLock() |
| Yazma üçün kilid metodu | Lock() |
Lock() |
| Oxuma üçün kilid azad etmə | Unlock() |
RUnlock() |
| Yazma üçün kilid azad etmə | Unlock() |
Unlock() |
| Performans | Daha sadə, tez-tez oxuma zamanı yavaş ola bilər | Daha mürəkkəb, tez-tez oxuma və nadir yazma zamanı daha sürətli ola bilər |