Sobes.tech
Junior — Middle

Kako ste izvršili poređenje brzine pristupa podacima koristeći sync.Map i sinhronizovani mutex?

sobes.tech АИ

Одговор од АИ

Za poređenje brzine pristupa podacima korišćenjem sync.Map i sinhronizovanog mutexa (sync.Mutex) u Go, izvršio sam benchmarke pomoću paketa testing.

Glavne tačke:

  • sync.Map je optimizovan za scenarije sa velikim brojem operacija čitanja i manjim brojem zapisa.
  • Mutex obezbeđuje zaključavanje pri pristupu običnoj mapi (map), što može stvoriti usko grlo pri visokoj konkurenciji.

Primer jednostavnog benchmarka:

func BenchmarkSyncMapLoad(b *testing.B) {
    var m sync.Map
    m.Store("key", "value")
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        m.Load("key")
    }
}

func BenchmarkMutexMapLoad(b *testing.B) {
    m := make(map[string]string)
    m["key"] = "value"
    var mu sync.Mutex
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        mu.Lock()
        _ = m["key"]
        mu.Unlock()
    }
}

U mojim testovima, sync.Map je pokazivao bolju performansu pri visokim nivoima konkurentnog čitanja, dok je mutex bio brži pri niskoj konkurenciji i čestim zapisima. Izbor zavisi od specifičnog scenarija korišćenja.