упоминал что частое использование atomic может привести к потере производительности... там какие-то проблемы с кроме сброса кэша есть?
Синхронизация Кеша, да. На мультипроцессорной машине будет ваще превед
много трафика синхронизации кешей.
На самом деле 50/50 :) при переключении контекста OS обычно пытается вернуть тред на этот же процессорный сокет :)
превед будет на numa, которая почти везде теперь
но на практике если мне надо безопасно получить какое то значение, то func (w *worker) getState() int32 { return atomic.LoadInt32(&w.state) } более предпочтительный вариант чем func (w *worker) getState() int32 { w.mutex.Lock() defer w.mutex.Unlock() return w.state } Или я ошибаюсь? Вроде первый вариант быстрее будет?
атомики хороши для флагов, счётчиков и когда надо атомарно(внезапно!) заменить значение/поинтер
первый вариант быстрее, но у них будет разница в поведении
Обсуждают сегодня