Size: a a a

Scala User Group

2021 January 08

VM

Vladimir Morozov in Scala User Group
RAFIZ
An actor contains many instance variables to maintain state while processing multiple messages

что это значит?один актор - одна переменная же, не?

мб неправильно понимаю что-то

вопрос по акка акторам
Актор хранит свое состояние, оно может состоять из N переменных, которые будут изменятся только по входящим сообщениям, по одному сообщению за раз
источник

R

RAFIZ in Scala User Group
Oleg ℕizhnik
откуда цитата то
источник

R

RAFIZ in Scala User Group
Vladimir Morozov
Актор хранит свое состояние, оно может состоять из N переменных, которые будут изменятся только по входящим сообщениям, по одному сообщению за раз
спасибо
источник

R

RAFIZ in Scala User Group
ясно теперь
а одной отправкой сообщения можно две переменных состояния изменить?

или it depends
источник

Oℕ

Oleg ℕizhnik in Scala User Group
да сколько хочешь
источник

Oℕ

Oleg ℕizhnik in Scala User Group
функция, обрабатывающая сообщение - произвольная сайдэффектящая функция, можешь менять состояния всего везде в любом количестве
источник

R

RAFIZ in Scala User Group
понятно спасибо
источник

R

RAFIZ in Scala User Group
везде пишут что акторы так устроены, что если их юзать - решена проблема гонки потоков

но я так понял, что это если изменять как раз это внутреннее состояние актора, то тогда этой проблемы не будет, ибо актор в один момент времени обрабатываeт одно сообщение

а если сайдэффектящую для двух акторов функцию записать так, что она изменяет какую-либо внешнюю переменную для них обоих, то lost changes как раз возможны, правильно понимаю?
источник

DO

Dmytro Orlov in Scala User Group
в акторе меняй только своё состояние и только синхронно
источник

Oℕ

Oleg ℕizhnik in Scala User Group
в глобальном смысле рейс кондишен нельзя решить, заменив одну общую конкаренси на другую
источник

Oℕ

Oleg ℕizhnik in Scala User Group
если актор отправляет сообщение двум другим акторам, невозможно предсказать, какой из них раньше обработает
источник

Oℕ

Oleg ℕizhnik in Scala User Group
и как дальше пойдёт
источник

Oℕ

Oleg ℕizhnik in Scala User Group
актор меняет только своё состояние синхронно
источник

Oℕ

Oleg ℕizhnik in Scala User Group
поэтому гарантия отсутствия рейскондишенов там не больше, чем у Ref/атомарных ссылок, которые хранят композитный стейт
источник

R

RAFIZ in Scala User Group
понятно спасибо
источник

R

RAFIZ in Scala User Group
Dmytro Orlov
в акторе меняй только своё состояние и только синхронно
что это значит?
то что как раз запросы на изменение состояния акторы отработают один за другим и не возникнет race condition?
источник

AG

Alexander Galagutski... in Scala User Group
RAFIZ
что это значит?
то что как раз запросы на изменение состояния акторы отработают один за другим и не возникнет race condition?
источник

AG

Alexander Galagutski... in Scala User Group
и по скольку актор работает в одной нитке то ничего не угрожает
источник

R

RAFIZ in Scala User Group
Alexander Galagutskiy
и по скольку актор работает в одной нитке то ничего не угрожает
а ещё вопрос (который я мог бы сам проверить кодом конечно, но все же), после того как актор обработает сообщение - эта нитка освобождается под другие задачи?или у этого актора больше нет сообщений
источник

AG

Alexander Galagutski... in Scala User Group
RAFIZ
а ещё вопрос (который я мог бы сам проверить кодом конечно, но все же), после того как актор обработает сообщение - эта нитка освобождается под другие задачи?или у этого актора больше нет сообщений
лучше пройдись по документации хорошо: что такое диспетчеры какие виды бывают и как они используются акторами, очереди их виды и как они используются акторами
источник