Size: a a a

2019 November 25

b

basiliscos in ErlangRus
это понятно. "не-реактивен" )
источник

DF

Denis Fakhrtdinov in ErlangRus
Это, опять же, можно обойти через proc_lib.
источник

DF

Denis Fakhrtdinov in ErlangRus
Буквально пару дней назад вспоминали об этом здесь.
источник

DF

Denis Fakhrtdinov in ErlangRus
Но я бы стартовал обычный процесс, а стадию "длинной" инициализации вынес в отдельный стейт конечного автомата.
источник

DF

Denis Fakhrtdinov in ErlangRus
Как и стадию дампов на диск.
источник

DF

Denis Fakhrtdinov in ErlangRus
В этом случае супервизор будет отзываться, а запросы в процесс можно легко отпинывать по стейту конечного автомата.
источник

b

basiliscos in ErlangRus
ну, тут такое... дело в том, что это несколько различное поведение супервайзера может быть: одно дело актор не стартанул, и надо схлопывать весь супервайзер и остальных всех чайлдов, а другое когда он стартанул и потом упал (в фазе длинной инициализации) - тут можно попробовать его перестартовать и т.п.  Важно что это разные ситуации/политики (в акторном подходе вообще, а не в эрланге конкретно)
источник

DF

Denis Fakhrtdinov in ErlangRus
Падать можно с разными сообщениями.
источник

AB

Alexey Bolshakov in ErlangRus
Denis Fakhrtdinov
Да, но супервизор будет заблокирован всё это время.
еще можно сделать call а в гс no_reply с последующим reply. тогда не будет заблокирован. если я правильно понял, о чем вы
источник

DF

Denis Fakhrtdinov in ErlangRus
Нет, я о том, что супервизор будет заблокирован пока не вернется init_ack.
источник

AB

Alexey Bolshakov in ErlangRus
аа. вы про инициализацию
источник

AB

Alexey Bolshakov in ErlangRus
инициализацию можно отложенно сделать. классика же
источник

DF

Denis Fakhrtdinov in ErlangRus
Ну просто здесь не только инициализация отложенная, но и выход.
источник

DF

Denis Fakhrtdinov in ErlangRus
Поэтому логичнее выглядит FSM.
источник

DF

Denis Fakhrtdinov in ErlangRus
Ну, на мой взгляд. Я бы делал на FSM.
источник

AB

Alexander Beniaminov in ErlangRus
FSM хорош, но если что-то попроще на уровне gen_server,  то в init назначаете в State status:starting, запускаете через spawn_monitor процесс инициализации (c  self(), ref и параметрами инициализации), завершаете init. На все запросы во время инициализации проверяете State на status starting, сообщаете, что извини, пока не готов. Этот отдельный процесс после инициализации отдает через месседж запустившему все параметры состояния вплоть до ets (для этого есть спец функция). Зпустивший получает их через hadle_info, назначает параметры State, status назанчает в состояние working. Останавливать можно точно так же.
источник

DF

Denis Fakhrtdinov in ErlangRus
Но это ведь и есть FSM на gen_server.
источник

AB

Alexander Beniaminov in ErlangRus
в станадртном FSM нет инициализации в отдельном процессе
источник

AB

Alex Bubnov in ErlangRus
Alexander Beniaminov
в станадртном FSM нет инициализации в отдельном процессе
но зачем она? это дорого и непонятно, зачем
источник

DF

Denis Fakhrtdinov in ErlangRus
А зачем она нужна?
источник