Fork me on GitHub
#clojure-russia
<
2015-07-25
>
maxp08:07:51

подскажите, уважаемые, большая ли разница по перформансу между atom и volatile! ?

ul11:07:46

Для полноты картины )))

ul11:07:40

Конкретные цифры надо замерять, но волатайл просто мутабельная переменная по сути.

ul11:07:55

А у атома есть ещё валидация и извещение наблюдателей.

ul11:07:24

Если валидатора и наблюдателей нет, это дёшево, но всё равно несколько лишних вызовов функций.

ul11:07:17

А, волатайл ещё swap! не поддерживает кажется.

nicola18:07:32

@maxp volatile просто атомарная ссылка, т.е. ты как нитка исполнения её не увидишь в промежуточном состоянии (там всекие мемори барьеры кэши и регистры многопроцессорные делают это возможным), а атом тебе позволяет транзакционно применить лямбду используя swap для изменения значения ссылки (возможно выполняя ее несколько раз в условиях гонки до победного конца) там спинлок используется для этого. Ну и валидаторы с оповещениями, которые можно использовать для io по результатам транзакции. А так, io внутри swap запрещён, поскольку может несколько раз исполняться.

nicola18:07:31

Кстати, теоретически можно создать ситуацию, когда swap не выполняться никогда, если его всегда будет опережать другой более быстрый swap.

nicola18:07:32

Я заводил issue, мне сказали by design - хочешь гарантий пользуйся ref & dosync ;)

nicola18:07:11

В общем volatile тебя ни от каких race conditions не спасёт, а atom - примитив синхронизации позволяющий тебе об этом практически не думать.

maxp19:07:24

Volatile можно рассматривать просто как один из способов сохранять mutable state, говорят, что оно быстрее, чем atom именно потому, что нет лишней синхронизации

maxp19:07:03

Но в этом месте мнения расходятся, почему и спрашиваю, собственно.

ul19:07:47

его хорошо использовать в безопасных местах, где нужна мутабельность и минимальные накладки

ul19:07:53

внутри трансдьюсера, например

ul19:07:18

а в обычной логике почти всегда лучше атом

nicola19:07:43

@ul а почему внутри трансдьюсера безопасно, там лок какой-то ставят или просто из за локальной области видимости?

ul19:07:57

второе

nicola19:07:59

Кстати кто swaggerом пользуеться? Какие ощущения?