Почему sync.Map — почти всегда плохая идея

Привет, Хабр! Сегодня разбираемся, почему sync.Map — выглядит аппетитно, но почти всегда оказывается не тем, чем вы ожидали.

https://habr.com/ru/companies/otus/articles/913620/

#golang #go #syncmap #потокобезопасность #многозадачность

Почему sync.Map — почти всегда плохая идея

Привет, Хабр! Сегодня разбираемся, почему sync.Map — выглядит аппетитно, но почти всегда оказывается не тем, чем вы ожидали. Откуда взялся sync.Map и зачем он был нужен К середине 2010-х стало...

Хабр

Внутреннее устройство sync.Map, сравнение производительности с map + RWMutex

Привет, Хабр! Эта статья для тех, кто хочет понять, когда стоит использовать sync.Map, а когда достаточно обычной map с мьютексом. В Каруне этот вопрос иногда возникал на код ревью, поэтому такая статья мне показалась полезной. TLDR: sync.Map лучше работает на задачах, где много операций чтения, и ключи достаточно стабильны. Внутреннее устройство sync.Map sync.Map — это потокобезопасная реализация мапы в Go, оптимизированная для определенных сценариев использования. Основная структура sync.Map выглядит примерно так: type Map struct {
mu Mutex
read atomic.Value // readOnly
dirty map[interface{}]*entry
misses int
}

type readOnly struct {
m map[interface{}]*entry
amended bool
}

type entry struct {
p unsafe.Pointer // *interface{}
} Здесь мы видим несколько ключевых полей:

https://habr.com/ru/companies/karuna/articles/834400/

#syncMap #map #mutex #rwmutex

Внутреннее устройство sync.Map, сравнение производительности с map + RWMutex

Привет, Хабр! Эта статья для тех, кто хочет понять, когда стоит использовать sync.Map, а когда достаточно обычной map с мьютексом. В Каруне этот вопрос иногда возникал на код ревью, поэтому такая...

Хабр