Size: a a a

Scala User Group

2020 December 19

S

Simon in Scala User Group
λoλdog
или вообще можно взять какой-нибудь TMap и в качестве ключа использовать индекс ячеики, которая обновляется, в качестве значения какой-нибудь TReentrantLock и лочить ячеику когда делаешь апдейт, а когда закончил убирать лок
1. это мне потребление памяти точно убъект
2. обращение к различным элементам массива не является независимым. То есть не синхронизированные записи в соседние ячейки могут влиять друг на друга.
источник

λ

λoλdog in Scala User Group
Simon
1. это мне потребление памяти точно убъект
2. обращение к различным элементам массива не является независимым. То есть не синхронизированные записи в соседние ячейки могут влиять друг на друга.
ну если есть понимает как оно должно лочиться, то можно делать лок на сегменты)
источник

S

Simon in Scala User Group
λoλdog
ну если есть понимает как оно должно лочиться, то можно делать лок на сегменты)
есть только 1 определение "как оно должно" - jmm. Все остальное - от лукавого.
источник

λ

λoλdog in Scala User Group
Ну в zio все ок с jmm будет
источник

S

Simon in Scala User Group
В контракте не написано - может поменяться в любой момент.
источник

λ

λoλdog in Scala User Group
ну тогда вам на джаву над)
источник

S

Simon in Scala User Group
спасибо, я там был, мне хватит
источник

λ

λoλdog in Scala User Group
На акке выходит один актор может модифицировать матрицу?
источник

S

Simon in Scala User Group
да
источник

λ

λoλdog in Scala User Group
Ну такое на зио можно было прост с семафором сделать)
источник

S

Simon in Scala User Group
там прямым текстом написано про happens before
источник

λ

λoλdog in Scala User Group
и с TReentrantLock
источник

S

Simon in Scala User Group
λoλdog
Ну такое на зио можно было прост с семафором сделать)
я понимаю, что от события "получение семафора" (через CAS на атомике скорее всего) на одном потоке, через запуск файбера, через возможные попадания файбера в очередь, через цепочку flatMap, до итогового выполнения кода на другом потоке (и, возможно, другом тредпуле), _скорее всего_ протягивается порядок из-за того, что все _скорее всего_ на атомиках (то есть волатайлах), но я не уверен, а капать весь связанный с этим код долго, и этого нет в контрактах, значит может поменяться.
источник

λ

λoλdog in Scala User Group
ну это и есть прелесть fp, local reasoning и все дела) не нужно думать о jmm )
источник

S

Simon in Scala User Group
конечно все проблемы снимаются через Ref[(Int, Data)], с парой get и set на Ref (с инкрементом версии) внутри семафора - там AtomicReference, то есть гарантию мы таки получим. Но это как раз тот колхоз, который я в итоге заменил на актор
источник

S

Simon in Scala User Group
λoλdog
ну это и есть прелесть fp, local reasoning и все дела) не нужно думать о jmm )
До тех пор пока не воткнулся в принципиально мутабельные данные. И тут все стало печально.
Ну что же, теперь у меня есть аж 3 случая, когда использование голых акторов оправдано =)
источник

λ

λoλdog in Scala User Group
не знаю, я бы и через zio сделал
источник

S

Simon in Scala User Group
λoλdog
не знаю, я бы и через zio сделал
ZIO.fromFuture(_ => actorRef.ask(...)) - вполне себе через zio =)
источник

λ

λoλdog in Scala User Group
еще и ask....
источник

λ

λoλegΥch in Scala User Group
источник