169 похожих чатов

У меня есть пачка процессов, которые выполняют какую-нибудь абстрактную логику,

взаимодействуя друг с другом. Я их оборачиваю в супервизор и хочу запускать как один процесс (типа {:ok, pid} = WrappingSupervisor.start_link(_)), но при этом, я хочу запускать несколько экземпляров этого процесса.

Если я регистрирую их по имени (например, name: __MODULE__), то больше одного экземпляра я не запущу. Можно запускать какое-нибудь Registry внутри, но сам регистри тоже надо как-то регать. И, как я понял, нет вариантов его стартануть отдельно, прокинув pid, потому что апишка к регистри предполагает использование атомов как идентификаторов.

Какие ещё есть варианты?

22 ответов

24 просмотра

А как ты хочешь чтобы к ним обращались, если ты хочешь несколько процессов под одним именем?

у тебя процессы общаются ациклическим графом?

Андрей- Автор вопроса
Lama Lover
А как ты хочешь чтобы к ним обращались, если ты хо...

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

Андрей
Я не хочу несколько процессов под одним именем. Я ...

Так, а как они общаются? Каждый с каждым? Тогда пусть стартуется какой-нибудь процесс-мастер или Registry, в котором все воркеры будут регистрироваться и у которого воркеры будут спрашивать имена соседей

у нас есть нечто отдаленно похожее, мы запускаем процессы под gen_tracker на тип в правильном порядке, и каждый из них в процессе инициализации резолвит и кэширует нужные ему пиды.

Андрей- Автор вопроса
Alex Bubnov
у тебя процессы общаются ациклическим графом?

Циклов нет, да. Т.е. в теории можно их последовательно стартануть, пробрасывая пиды тех, что были выше. Но это выглядит как слишком много действий руками. Да и пихать под супервизор не очень удобно.

Андрей- Автор вопроса
Lama Lover
Так, а как они общаются? Каждый с каждым? Тогда пу...

Типа мастер регистри на все процессы-супервизоры?

Андрей
Типа мастер регистри на все процессы-супервизоры?

Не понял. У тебя несколько супервизоров, и все чайлды этих всех супервизоров общаются между собой?

Андрей- Автор вопроса
Lama Lover
Не понял. У тебя несколько супервизоров, и все чай...

Все чайлды супервизора общаются в пределах супервизора.

Lama Lover
Не понял. У тебя несколько супервизоров, и все чай...

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

Андрей
Все чайлды супервизора общаются в пределах суперви...

Ну вот рядом к этому супервизору стартуй Registry. И пусть воркеры в нём регаются. Аля MasterSup all for one |- Registry |- WorkerSup |- Worker1 |- Worker2 ...

Андрей- Автор вопроса
Lama Lover
Ну вот рядом к этому супервизору стартуй Registry....

Ну, этот вариант я упомянул вначале. Тут возникает проблема, как работать с этим регистри, не регистрируя его по имени.

Андрей
Ну, этот вариант я упомянул вначале. Тут возникает...

Так и не регистрируй его по имени. Можешь сделать через DynamicSupervisor, чтобы препендился аргумент с пидом Registry А так, лучше регать по имени, чтобы у тебя был общий префикс для всего пула (аля Pool1) И у процессов были имена типа Pool1.MasterSup, Pool1.Registry, Pool1.WorkerSup, а у воркеров были имена из Registry

Андрей- Автор вопроса
Lama Lover
Так и не регистрируй его по имени. Можешь сделать ...

Как я сказал, так сделать нельзя. Либо я не понял твою схему.

Андрей
screenshot Как я сказал, так сделать нельзя. Либо я не понял ...

Ну ты ещё можешь сделать глобальный регистри для этих пуллов и регать в него типа {pool_name, worker_name}

Андрей
screenshot Как я сказал, так сделать нельзя. Либо я не понял ...

А почему ты не можешь назвать пулл как-нибудь?

Андрей- Автор вопроса
Lama Lover
А почему ты не можешь назвать пулл как-нибудь?

В принципе могу. Но хотелось не генерить атомы динамически.

Андрей
В принципе могу. Но хотелось не генерить атомы дин...

То есть у тебя эти пуллы появляются в рантайме? Или может их заданное число в конфиге (или они известны на момент инициализации)?

Андрей- Автор вопроса
Lama Lover
То есть у тебя эти пуллы появляются в рантайме? Ил...

Задаются в конфиге, так что бесконечное количество их не появится, да.

Андрей
Задаются в конфиге, так что бесконечное количество...

Ну тогда сделай префикс атомом просто, это будет самое удобное. Лучше чтобы префикс тоже в конфиге задавался

Похожие вопросы

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
как быть с принтером? такой подход прокатит?
zamtmn
12
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Карта сайта