Автор сравнивает шесть подходов к реализации потокобезопасного 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
Похожее
28.09.2026
C на Go
Интересный пропозал - добавить возможность сборки Go-пакетов, использующих cgo д...
25.09.2026
Бенчим джейсон
Автор на реальном API с нагрузкой 50M запросов/сутки)сравнивает производительнос...
24.09.2026
Rune
Команда Unstable Build заопенсорсила свою нативную IDE Rune, написанную на Go. ...
23.09.2026
Специализированные аллокаторы
В Go 1.27 появилась оптимизация выделения памяти для объектов размером до 80 бай...