
عاصم بن حارث
25.12.2017
11:16:06
?

Evgeny
25.12.2017
11:16:38
да там чувак из зала заявил, что в эликсире никак низзя сделать race condition

Alexey
25.12.2017
11:16:39

Alex
25.12.2017
11:16:49
так любое же несинхронизированное взаимодействие

Google

Evgeny
25.12.2017
11:16:54
аха

Alexey
25.12.2017
11:17:06
ну так сделай кривой дизайн

Evgeny
25.12.2017
11:17:10
можно счетчик в генсервер засунуть и устроить RC

Alexey
25.12.2017
11:17:23
в ерланге возможно все! если ты хочешь. даже рейз кондишен

Evgeny
25.12.2017
11:17:40
везде можно все

Alexey
25.12.2017
11:17:56
ты еще здесь?

Evgeny
25.12.2017
11:18:08
даже в хаскеле

Taras ?
25.12.2017
11:18:23

Alexey
25.12.2017
11:18:40
если не дунуть, то и ерланг не зайдет

Taras ?
25.12.2017
11:19:01
зашел)

Evgeny
25.12.2017
11:19:16
на самом деле достаточно просто не уметь конкурентность и можно накосячить в генсервере и будет RC

عاصم بن حارث
25.12.2017
11:19:20

Alexey
25.12.2017
11:19:23
https://habrahabr.ru/post/281737/#comment_9734722

Google

Alexey
25.12.2017
11:19:35
зашел)
но со стороны всегда кажется, что ты дунул

Evgeny
25.12.2017
11:21:57
дизайн языка и OTP тут не причем
просто неверная работа с состоянием и упс

Alexey
25.12.2017
11:22:43
а если надо сделать херню, то ты всегда можешь начать пересылать списки из миллиона элементов между процессами, вызывать ГС из ГС и динамически формировать атомы из строк

Evgeny
25.12.2017
11:23:09
да нет, нет там никаких гигантских списков

Alexey
25.12.2017
11:23:11
мне книжку подарили, и я доволен

Evgeny
25.12.2017
11:23:14
ща приведу пример
Пишем генсервер у которого состояние счетчик - целое. и два обработчика - один читает счетчик, другой пишет.
Два процесса параллельно читают счетчик, добавляют к нему единицу и пишут обратно. В данном случае вероятна ситуация, когда после всего этого счетчик будет увеличен на единицу, а не на два, как ожидается.

Taras ?
25.12.2017
11:25:38

Alexey
25.12.2017
11:26:00

Evgeny
25.12.2017
11:26:28
две функции increment и decrement
handle_call(:increment....

Alexey
25.12.2017
11:27:10
а вторая тоже call?

Evgeny
25.12.2017
11:27:17
ага

Alexey
25.12.2017
11:27:36
ну и. каким образом оно испортится, если они будут последовательно выполнены?

Alex
25.12.2017
11:28:06
а как именно "последовательно"?

عاصم بن حارث
25.12.2017
11:28:11
_cast ... _call все дело в волшебных пузырьках ))) (с)Швэпс-с-с...

Alexey
25.12.2017
11:28:32
либо тут явное не понимание того, как ГС работает

Google

Evgeny
25.12.2017
11:28:37
легко, первый процесс читает и второй сразу за ним. оба прочитают одинаковое значение - n, после чего оба друг за другом пишут n + 1

Alexey
25.12.2017
11:28:48
либо предлагается считать значение из ГС, в своем процессе изменить и записать обратно

Evgeny
25.12.2017
11:28:51
такое вполне вероятно

Alex
25.12.2017
11:28:53

Alexey
25.12.2017
11:28:56

Alex
25.12.2017
11:29:12
это абсолютно сериализованный доступ

Alexey
25.12.2017
11:29:23

Dorzhi
25.12.2017
11:29:25
это ж пример из shared-memory языков

Alexey
25.12.2017
11:29:37
о том, как работают ГСы. и на основе чего

Dorzhi
25.12.2017
11:29:55
в джаве такое раз плюнуть

Evgeny
25.12.2017
11:30:01

Alex
25.12.2017
11:30:02
а вот если у тебя в интерфейсе get и put - вот тут можно сделать RC

Alexey
25.12.2017
11:30:31
вот да. если ты в левом процессе сделал гет. прибавил и сделал put, то да
но это по дизайну ССЗБ

Alex
25.12.2017
11:30:48

Evgeny
25.12.2017
11:30:49
понятно, что это ошибка, но получается RC.

Alexey
25.12.2017
11:31:40
ну это типа как я взял си, и за пределами массива данные записал

Alex
25.12.2017
11:31:43

Evgeny
25.12.2017
11:32:32

Google

Alexey
25.12.2017
11:32:48
вот я могу понять, если б ты сказал, что у тебя подобное происходит с ETS

Evgeny
25.12.2017
11:33:15

Alexey
25.12.2017
11:33:20
но когда ты сам дизайнишь приложение таким образом, то это твоя ошибка, а не ОТП
тут принципиальное буквоедство, как я понял

Evgeny
25.12.2017
11:33:54
Я-то так никогда не сделаю ибо собаку съел на мьютаксах и прочем синхронизационном говне

Alexey
25.12.2017
11:33:59
был у меня коллега один
он как-то привязался к тому, что я назвал функции - чистыми
а они не чистые!

Admin
ERROR: S client not available

Evgeny
25.12.2017
11:34:21
:)

Alexey
25.12.2017
11:34:23
они побочные эффекты имеют

Evgeny
25.12.2017
11:34:28
Не я не буквоед

Alexey
25.12.2017
11:34:47
как так то бля? я вот смотрю на текст функции. и у меня в мозгу нейронная БД меняется. всё! побочный эффект

Evgeny
25.12.2017
11:34:51
но зачем называть чистыми нечистые функции??? ?

Alexey
25.12.2017
11:35:16
ты буквоед
приходи, пожалуйста, на доклады Гошников
и задавай вопросы

Evgeny
25.12.2017
11:35:49
Зачем?

Alexey
25.12.2017
11:35:55
о том, как они с рейсами справляются

Google

Alex
25.12.2017
11:36:35
да так же - сериализация посредством каналов

Alexey
25.12.2017
11:36:37

Evgeny
25.12.2017
11:36:41
Просто там на конфе докладчик по эликсиру сказал, что RC могут быть в бизнес логике, а мужик из зала заявил, что это невозможно. Ну мне немного стало обидно за докладчика

Alexey
25.12.2017
11:36:51
считай, что это мессадж объясняемая форма лочки данных

Evgeny
25.12.2017
11:37:19
А, вот почему ты обиделся :)

Alexey
25.12.2017
11:37:23
но да. согласен. был не прав
если ты хочешь, чтоб было, то можешь сделать
я не обиделся
просто там парни сидят с нулем знаний вообще

Evgeny
25.12.2017
11:38:01
Правильный ответ: в эликсире намного сложнее сделать RC, чем например в D

Alex
25.12.2017
11:38:05

Alexey
25.12.2017
11:38:09
и им так с порога "тут хз от куда могу произойти рейз кондишены"

Evgeny
25.12.2017
11:39:10
хз откуда ни в каком языке не могут

Alexey
25.12.2017
11:39:11
никто не знает, от куда они берутся, но происходят. даже если не хочешь
и тут бы я может быть сказал бы, что у меня RC никогда не было
но потом, возможно, пришлось бы пояснять, сколько я с ерлангом и эликсиром работаю, в проде ли. показать свои шедевры и так далее
а иначе ведь не убедительно будет

Evgeny
25.12.2017
11:40:45
У меня тоже, я в многопоточье сразу все синхронизирою, а вот дедлоки бывали
в эликсире я пока только один способ дедлока знаю, надеюсь он один-единственный

Alexey
25.12.2017
11:42:42
какой?

Alex
25.12.2017
11:43:31
какой?
два gen_server:call(...., infinity) друг к другу