Re[13]: Об очередном антипаттерне. Модель акторов.
От: so5team https://stiffstream.com
Дата: 26.08.15 07:37
Оценка: +1
Здравствуйте, LaPerouse, Вы писали:

LP>Actor:

LP>
LP>if (state == 1) {
LP>    fsmState = WAIT_FOR_RESPONSE1;
LP>    call(request1);
LP>}
LP>else if (state == 2) {
LP>    fsmState = WAIT_FOR_RESPONSE2;
LP>    call(request2);
LP>}

LP>//Обработка
LP>void messageReceived(Response response) {
LP>    if (fsmState == WAIT_FOR_RESPONSE1)
LP>        calc1(response);
LP>    else if (fsmState == WAIT_FOR_RESPONSE2)
LP>        calc2(response);
LP>    else if (fsmState == NO_REQUEST)//здесь сообщение Response пришло без Request
LP>        processEvent(response);
LP>}
LP>


Может быть вовсе и не так. А вот так:
// Описание связей.
fsmState.in(WAIT_FOR_RESPONSE1).event(calc1);
fsmState.in(WAIT_FOR_RESPONSE2).event(calc2);
fsmState.in(NO_REQUEST).event(processEvent);


Т.е. обслуживание конечного автомата актора является одной из задач фреймворка, реализующего Actor Model. То, что в Akka/Scala этого нет не означает ущербности ActorModel.
Отредактировано 26.08.2015 7:39 so5team . Предыдущая версия .
Re[12]: Об очередном антипаттерне. Модель акторов.
От: Sinix  
Дата: 26.08.15 08:23
Оценка: +2
Здравствуйте, LaPerouse, Вы писали:


S>>Разумеется, это не значит, что на голый await стоит натягивать акторы.

LP>В Unity3d натянули на yield return null. Правда, не акторы, а автоматный код скриптов.
Угу, это не совсем акторы.

Акторы предполагают, во-первых, декларативное описание ч/з комбинацию состояние-входы-выходы.
Во-вторых, свою модель вычислений (с immutable-данными + pure-функциями).
Во-третьих, полноценный рантайм для шедулинга/обработки ошибок/отката/etc.
В четвёртых, прозрачное масштабирование от мобильника до облака.

ну и тыды и тыпы.
Без всего этого акторы использовать можно, но, за редким исключением, всегда найдётся более простое и удобное решение.

А, да, всю эту кухню конечно можно спрятать за await, но менее главной она от этого не станет.
Re[13]: Об очередном антипаттерне. Модель акторов.
От: BulatZiganshin  
Дата: 26.08.15 08:46
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Без всего этого акторы использовать можно, но, за редким исключением, всегда найдётся более простое и удобное решение.


а хоть где-нибудь они вообще реализованы?
Люди, я люблю вас! Будьте бдительны!!!
Re[14]: Об очередном антипаттерне. Модель акторов.
От: Sinix  
Дата: 26.08.15 09:16
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

S>>Без всего этого акторы использовать можно, но, за редким исключением, всегда найдётся более простое и удобное решение.


BZ>а хоть где-нибудь они вообще реализованы?

Эрланг, MS orleans, с натяжкой скала.
Плюс куча невыстреливших прототипов внутри MS research. Как минимум in-out contracts в Singularity и COmega/Axum/Ms robotics CCR.
Re[15]: Об очередном антипаттерне. Модель акторов.
От: BulatZiganshin  
Дата: 26.08.15 09:46
Оценка:
Здравствуйте, Sinix, Вы писали:

S>>>Без всего этого акторы использовать можно, но, за редким исключением, всегда найдётся более простое и удобное решение.

BZ>>а хоть где-нибудь они вообще реализованы?
S>Эрланг

смотрим:
> Акторы предполагают, во-первых, декларативное описание ч/з комбинацию состояние-входы-выходы.

этого в эрланге нет

> В четвёртых, прозрачное масштабирование от мобильника до облака.


этого тоже. таким образом, эрланг — неподходящий язык для использования акторов?
Люди, я люблю вас! Будьте бдительны!!!
Re[16]: Об очередном антипаттерне. Модель акторов.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.08.15 10:09
Оценка: 5 (1)
Здравствуйте, alex_public, Вы писали:

_>Здесь имелось в виду что-то рукопашное, типа примеров в первом сообщение темки. А async/await из C# — это всё же сопрограмма, а не конечный автомат (пусть даже она и реализована через него внутри). Собственно если мы например переделаем в следующей версии C# реализацию async/await через stackfull coroutine, то скорее всего никто этого и не заметит. )))


Скорее всего бОльшая часть программ тупо перестанет работать, потому что stackfull, внезапно, дает возможность, ну например, повторно войти в принципиально нереэнтерабельный участок кода. Ну вот блокирующее чтение из стрима. Глобальные ресурсы пока еще никто не отменял. Опаньки !
Отредактировано 26.08.2015 10:46 Pauel . Предыдущая версия .
Re[16]: Об очередном антипаттерне. Модель акторов.
От: Sinix  
Дата: 26.08.15 10:17
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

>> Акторы предполагают, во-первых, декларативное описание ч/з комбинацию состояние-входы-выходы.

BZ>этого в эрланге нет
Весь gen_event же.

>> В четвёртых, прозрачное масштабирование от мобильника до облака.

Слышал как минимум про две софтины с общим кодом на эрланге для сервера и клиента на мобильнике. Если не врут, то поддержка андроида в Erlang/OTP прям из коробки была. Так что с натяжкой, но есть.
Re[17]: Об очередном антипаттерне. Модель акторов.
От: Sinix  
Дата: 26.08.15 10:21
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Скорее всего бОльшая часть программ тупо перестанет работать, потому что stackfull, внезапно, дает возможность, ну например, повторно войти в принципиально нереэнтерабельный участок кода.

Так это не столько к await, сколько ко всему коду, написанному без учёта реэнтерабельности.
Ну, т.е. поломается и без await-а
Re[18]: Об очередном антипаттерне. Модель акторов.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.08.15 10:50
Оценка: 1 (1) +1
Здравствуйте, Sinix, Вы писали:

I>>Скорее всего бОльшая часть программ тупо перестанет работать, потому что stackfull, внезапно, дает возможность, ну например, повторно войти в принципиально нереэнтерабельный участок кода.

S>Так это не столько к await, сколько ко всему коду, написанному без учёта реэнтерабельности.
S>Ну, т.е. поломается и без await-а

Поломается из за применения любой stackfull короутины, действительно, без разницы, с await или без. Причина именно в стекфулл короутине, она вводит ничем не ограниченую кооперативную многозадачность. Однозадачный код вдруг станет многозадачным.
Реэнтерабельность в нереэнтерабельный участок это частный случай. Куда более вероятен сбой из за нарушения инварианта/протокола любого глобального ресурса, хотя бы и простой переменной.
Re[17]: Об очередном антипаттерне. Модель акторов.
От: BulatZiganshin  
Дата: 26.08.15 11:01
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Скорее всего бОльшая часть программ тупо перестанет работать, потому что stackfull, внезапно, дает возможность, ну например, повторно войти в принципиально нереэнтерабельный участок кода. Ну вот блокирующее чтение из стрима. Глобальные ресурсы пока еще никто не отменял. Опаньки !


для этого нужно чтобы прикладной код ещё и заходил туда. сейчас он этого не делает и автоматом делать этого не станет. с таким же успехом иожно ожидать что добавление библиотеки Thread поломает старые однопоточные программы, даже если они её не вызывают
Люди, я люблю вас! Будьте бдительны!!!
Re[14]: Об очередном антипаттерне. Модель акторов.
От: Sharov Россия  
Дата: 26.08.15 11:09
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Конечный автомат — это полезный инструмент, но не имеющий никакого отношения к вопросам многопоточности, асинхронного кода, сопрограммам и т.п. )


Конечный автомат имеет самое непосредственное отношение к многопоточности и асинхронному коду. Начинать можно от верификации и симуляции многопоточных программ.

Можно открыть эту книгу на восьмой главе. Или вот, например.
Кодом людям нужно помогать!
Re[18]: Об очередном антипаттерне. Модель акторов.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.08.15 12:38
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>для этого нужно чтобы прикладной код ещё и заходил туда. сейчас он этого не делает и автоматом делать этого не станет. с таким же успехом иожно ожидать что добавление библиотеки Thread поломает старые однопоточные программы, даже если они её не вызывают


Наоборот, именно это прикладной код и делает. От тебя мало что будет зависеть. Вот ты ожидаешь, что чтение из стрима блокирующее, у тебя один поток, потому упрощаешь себе жизнь. Скажем, в однозадачном приложении никто не утруждает себя телодвижениями "а вдруг через 5 лет здесь появится многозадачность"

Теперь фокус — ктото взял и запустил твой код во втором потоке. Вопрос — чего ожидать.
Собтсвенно непонятно, почему в случае со Stackfull короутинами будет как то иначе ?
Re[19]: Об очередном антипаттерне. Модель акторов.
От: BulatZiganshin  
Дата: 26.08.15 12:53
Оценка:
Здравствуйте, Ikemefula, Вы писали:

BZ>>для этого нужно чтобы прикладной код ещё и заходил туда. сейчас он этого не делает и автоматом делать этого не станет. с таким же успехом иожно ожидать что добавление библиотеки Thread поломает старые однопоточные программы, даже если они её не вызывают


I>Наоборот, именно это прикладной код и делает. От тебя мало что будет зависеть. Вот ты ожидаешь, что чтение из стрима блокирующее, у тебя один поток, потому упрощаешь себе жизнь. Скажем, в однозадачном приложении никто не утруждает себя телодвижениями "а вдруг через 5 лет здесь появится многозадачность"


I>Теперь фокус — ктото взял и запустил твой код во втором потоке. Вопрос — чего ожидать.

I>Собтсвенно непонятно, почему в случае со Stackfull короутинами будет как то иначе ?

потому что код и так уже работает во втором потоке. только теперь короутина стала поддерживать переключение из вложенных выховов. но сами по себе они от добавления этой поддержки не появятся
Люди, я люблю вас! Будьте бдительны!!!
Re[20]: Об очередном антипаттерне. Модель акторов.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.08.15 13:14
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

I>>Теперь фокус — ктото взял и запустил твой код во втором потоке. Вопрос — чего ожидать.

I>>Собтсвенно непонятно, почему в случае со Stackfull короутинами будет как то иначе ?

BZ>потому что код и так уже работает во втором потоке. только теперь короутина стала поддерживать переключение из вложенных выховов.


Правильно — как только вводится второй поток или вторая задача, вся стройная концепция быстро рушится.

>но сами по себе они от добавления этой поддержки не появятся


И ежу понятно. Валится не от добавления либы, а от того что ты сделаешь код многозадачным. Представь себе бутерброд:

твой код вызывает сторонний фремворк который вызывает твой стрим. Ты, внезапно, ввел короутины и стрим стал неблокирующим.
Вопрос — откуда фремворку знать, что надо как то иначе работать с глобальными ресурсами ?
Re[21]: Об очередном антипаттерне. Модель акторов.
От: BulatZiganshin  
Дата: 26.08.15 13:27
Оценка: -1
Здравствуйте, Ikemefula, Вы писали:

I>Правильно — как только вводится второй поток или вторая задача, вся стройная концепция быстро рушится.


ты потерял суть спора
Люди, я люблю вас! Будьте бдительны!!!
Re[22]: Об очередном антипаттерне. Модель акторов.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.08.15 13:57
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

I>>Правильно — как только вводится второй поток или вторая задача, вся стройная концепция быстро рушится.


BZ>ты потерял суть спора


Цитирую: "для этого нужно чтобы прикладной код ещё и заходил туда"

Смотри внимательно, прикладной код быть в обеих ветках, в разное время, но не в обеих одновременно
var oldState = globalResource;
globalResource = new State();
var x = stream.read();  /// вот этот вызов сделаем неблокирующим, шоб сильнее было
... ля-ля-ля
globalResource = oldState;

где то "там"

var oldState = globalResource;
globalResource = new State();
var x = someLongBlockingCall();
... ля-ля-ля
globalResource = oldState;


Теперь, если стрим будет неблокирующим, прикладной код может работать одновременно в обеих ветках.
Re[17]: Об очередном антипаттерне. Модель акторов.
От: neFormal Россия  
Дата: 26.08.15 17:45
Оценка:
Здравствуйте, Sinix, Вы писали:

>>> Акторы предполагают, во-первых, декларативное описание ч/з комбинацию состояние-входы-выходы.

BZ>>этого в эрланге нет
S>Весь gen_event же.

т.е. эрланговские акторы без gen_event'а уже не акторы?

>>> В четвёртых, прозрачное масштабирование от мобильника до облака.

S>Слышал как минимум про две софтины с общим кодом на эрланге для сервера и клиента на мобильнике. Если не врут, то поддержка андроида в Erlang/OTP прям из коробки была. Так что с натяжкой, но есть.

я погуглил, но там что-то совсем мутное.
можешь найти адекватный пример?
...coding for chaos...
Re[18]: Об очередном антипаттерне. Модель акторов.
От: Mamut Швеция http://dmitriid.com
Дата: 26.08.15 18:49
Оценка: 38 (1)
F>т.е. эрланговские акторы без gen_event'а уже не акторы?

Акторы, акторы.

Главное отличие Эрланга — прагматичный подход. Если теория говорит, что «функциональный язык должен быть чистым», а «акторы должны декларативно задаваться», Эрланг смотрит на это с легким недоумением и презрением, а потом реализует то, что наиболее рпактично в реальном мире.



В итоге да, наверное, чисто с академической точки зрения Эрланг и не шибко функциональный, и не шибко акторный, и не шибко ОО, и... и...

F>я погуглил, но там что-то совсем мутное.

F>можешь найти адекватный пример?

На практике нет ничего. Есть теоретическая возможность запустить или написать что-то на Эрланге для Андроида и iOS, на практике — нет. Это пилят/пилили какие-то энтузиасты. В обозримом будущем на мобильных устройствах Эрланга не будет (другое дело всякий embed, туда его активно впиливают)


dmitriid.comGitHubLinkedIn
Re[18]: Об очередном антипаттерне. Модель акторов.
От: Sinix  
Дата: 26.08.15 19:41
Оценка:
Здравствуйте, neFormal, Вы писали:


F>т.е. эрланговские акторы без gen_event'а уже не акторы?

Нет конечно Но НЯП, это как "самурай без меча подобен самураю с мечом, но только без меча". Есть-то оно есть, толку-то?
И на эту тему лучше реальных эрланговодов поспрашивать, я скорее свечку держал
Если ничего не перепутал, из отметившихся в ветке, это как минимум Mamut.

F>я погуглил, но там что-то совсем мутное.

F>можешь найти адекватный пример?
Неа, про эрланг на андроиде с чужих слов, гугль находит что-то типа такого, не больше.
Re[19]: Об очередном антипаттерне. Модель акторов.
От: neFormal Россия  
Дата: 26.08.15 20:04
Оценка: +2
Здравствуйте, Sinix, Вы писали:

S>И на эту тему лучше реальных эрланговодов поспрашивать, я скорее свечку держал

S>Если ничего не перепутал, из отметившихся в ветке, это как минимум Mamut.

понятно. прсто эрланг создан практиками. и это отражается во всём вплоть до стандартной библиотеки. теоретические подходы к нему мало применимы.
а так-то я тоже на нём пишу текущий проект.

F>>я погуглил, но там что-то совсем мутное.

F>>можешь найти адекватный пример?
S>Неа, про эрланг на андроиде с чужих слов, гугль находит что-то типа такого, не больше.

да, видел. но мне показалось мутным.
много чего запускали на андроиде на разных языках, но всё оно, как по мне, выглядит слабо.
...coding for chaos...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.