[Перевод] Атомарные операции против мьютексов в Go: когда скорость становится проблемой

Команда Go for Devs подготовила перевод статьи о том, действительно ли атомарные операции всегда быстрее и лучше мьютексов в конкурентном коде. Автор разбирает реальные сценарии, показывает бенчмарки и объясняет, почему рост производительности часто оборачивается ростом сложности и рисков для корректности.

https://habr.com/ru/articles/986732/

#concurrency #atomic #mutex #rwmutex #performance #goroutines #синхронизация

Атомарные операции против мьютексов в Go: когда скорость становится проблемой

Команда Go for Devs  подготовила перевод статьи о том, действительно ли атомарные операции всегда быстрее и лучше мьютексов в конкурентном коде. Автор разбирает реальные сценарии, показывает...

Хабр

Внутреннее устройство 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 с мьютексом. В Каруне этот вопрос иногда возникал на код ревью, поэтому такая...

Хабр