map в Go не потокобезопасны и требуют защиты через мьютексы при конкурентном доступе. В отличие от них, sync.Map обеспечивает безопасность при конкурентном доступе без необходимости явно использовать мьютексы. Основные методы sync.Map Delete(key any): удаляет элемент по ключу; Load(key any) (value any, ok bool): извлекает значение по ключу; LoadAndDelete(key any) (value any, loaded bool): извлекает и одновременно удаляет элемент; LoadOrStore(key, value any) (actual any, loaded bool): извлекает значение или сохраняет новое, если ключ отсутствует; Range(f func(key, value any) bool): выполняет функцию для каждого элемента мапы; Store(key, value any): сохраняет пару ключ-значение. cache contention В коде sync.RWMutex можно увидеть, что при блокировке на чтение, каждая горутина атомарно обновляет счетчик readerCount. Когда ядро процессора обновляет счётчик, оно сбрасывает кеш для этого адреса в памяти для всех остальных ядер и объявляет, что владеет актуальным значением для адреса. Следующе
#22 Когда использовать sync.Map в Go
20 декабря 202320 дек 2023
1066
1 мин