Обновить

Комментарии 2

Когда miss > len(dirty)

Тут небольшое уточнение - когда miss >= len(dirty), если судить по исходникам:

func (m *Map) missLocked() {
	m.misses++
	if m.misses < len(m.dirty) {
		return
	}
	m.read.Store(&readOnly{m: m.dirty})
	m.dirty = nil
	m.misses = 0
}

И начиная, кажется, с 1.19 - read стал atomic.Pointer[readOnly] вместо atomic.Value.

Потому что авторы го как обычно сунули костыль вместо нормального решения. Новички приходят, видят структуру Map в пакете sync и делают логичный вывод, что в случае если нужна потокобезопасная мера, нужно юзать её, не писать же свои велосипеды с нуля.

В нормальных языках реализация типа ConcurrentMap из статьи была бы внутри стандартной библиотеки, а синк мапа называлась бы sync.MostReadMap или как угодно ещё, но не тупо sync.Map

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS