Автор сравнивает шесть подходов к реализации потокобезопасного in-memory кеша в Go. От наивного map без блокировок до copy-on-write через atomic.Pointer и все это на своем на 20-ядерном i7-14700K под разными нагрузками - read-only, read-heavy, write-heavy.
В итоге приходит к выводу, что шардированая 256-сегментная мапа с отдельным мьютексом на сегмент это лучшее универсальное решение. Такой подход дает почти 8-кратное ускорения на 8 ядрах по сравнению с одним sync.Mutex.
И неожиданно sync.RWMutex контринтуитивно почти не помогает чтению при количестве ядер больше двух и проигрывает обычному мьютексу на запись из-за накладных расходов на счетчик читателей, один мьютекс с ростом ядер замедляется из-за ping-pong кеш-линии с блокировкой, а распределение Ципфа для ключей ускоряет чтение тк горячие ключи остаются в кеше процессора, но может замедлить шардированный кеш, когда горячие ключи попадают в один шард и создают коллизию
02.07.2026
Похожее
19.07.2026
Объединение запросов
Статья объясняет технику объединения запросов на Go с помощью пакета singlefligh...
16.07.2026
mmap или pread
Автор статьи - инженер из VictoriaMetrics. На примере реального движка хранения ...
16.07.2026
TypeScript переписали на Go
Команда Microsoft с помощью AI переписала компилятор TypeScript 7.0 на Go, а не ...
14.07.2026
На 49% быстрее из-за выравнивания
Разбор неожиданной оптимизации в Go: сдвиг массива на 4 байта через добавление p...