Size: a a a

2021 November 27

SB

S B in ErlangRus
Получается sofo запускает ребёнка, ребёнок на старте регистрирует себя в регистре, а в методе terminate удаляется из решистра? Или где там ещё мониторить смерть детей надо?
источник

LL

Lama Lover in ErlangRus
Мониторить смерть детей надо
источник

SB

S B in ErlangRus
А где это правильно делать? Где будет функция monitor вызываться (или как она там называется, я не помню)?
источник

LL

Lama Lover in ErlangRus
Да, monitor
В том процессе, который управляет пуллом и держит настройки его конфигурации. В моей схеме это pool_router

Но можно, конечно, использовать готовые решения для именования процессов типа gproc или syn
источник

EM

Evgeny M. in ErlangRus
terminate кстати не всегда срабатывает
источник

EM

Evgeny M. in ErlangRus
процессов кстати конечное количество? У них есть какой-нибудь идентификатор который можно привести к атому?
источник

SB

S B in ErlangRus
А можно какой-то очень простой пример как этот пул_роутер хоть выглядит и какие готовые решения дружат с rebar3? Я как-то не въезжаю, а с Эрлангом опыта мало.
источник

LL

Lama Lover in ErlangRus
Там же динамический пул
источник

SB

S B in ErlangRus
Есть, уникальный айди внутри. То есть, у каждого генсервереа есть стейт и там одно из полей — это уникальный айди вещей реального мира.
источник

SB

S B in ErlangRus
Ну верхний предел есть — более тысячи точно не будет.
источник

EM

Evgeny M. in ErlangRus
сделать его статическим. запустить сразу все процессы, поименовать их атомом
источник

SB

S B in ErlangRus
Не, не знаю я какие айди прилетят.
источник

SB

S B in ErlangRus
Атомы не знаю наперёд.
источник

EM

Evgeny M. in ErlangRus
и обюращаться не к пиду, а к атому. при необходимости делать binary_to_atom
источник

EM

Evgeny M. in ErlangRus
тогда да, динамический пул
источник

LL

Lama Lover in ErlangRus
Ну всё очень просто. Есть модуль pool_router (или pool_manager), он генсервер

У него есть call типа start_worker(custom_id, options).
Этот call запускает воркера, получает его пид, вешает монитор на пид, кладёт в ets что-то типа {custom_id, pid}

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

В этом же модуле есть функция
custom_id_to_pid(custom_id), которая достаёт пид из ets

Всё
источник

SB

S B in ErlangRus
А запускает он воруера, обращаясь прямо к супервайзеру, который simple one for one?
источник

LL

Lama Lover in ErlangRus
Для этого можно использовать готовые решения типа gproc или syn
источник

LL

Lama Lover in ErlangRus
Да, именно так
источник

SB

S B in ErlangRus
Все, теперь прояснилось, благодарю.
источник