умный способ связаться с незарегистрированными процессами в Erlang? - PullRequest
2 голосов
/ 21 февраля 2012

Допустим, вы хотите заполнить узел erlang 100 незарегистрированными gen_fsm, представляющими собак. Каждая собака может передвигаться, и должна быть в состоянии направить к некоторому центральному процессу свое текущее положение. Другие процессы (например, ловец собак) должны запрашивать центральный процесс, находится ли рядом с ним какая-то собака.

Теперь вопрос: сохранение в состоянии центрального процесса списка кортежей в форме {Pid, {X,Y}} - это хорошее решение? И если так, может ли единственным центральным процессом быть узким местом?

Ответы [ 3 ]

3 голосов
/ 21 февраля 2012

Для готового надежного решения для гибкого реестра процессов взгляните на gproc

2 голосов
/ 21 февраля 2012

Я столкнулся с подобной проблемой и для автоматической рассылки большого количества клиентов и серверов. 1.1. Может быть, модуль proecess group pg2 может оказать некоторую помощь, он содержит следующие функции:

get_closest_pid(Name) -> pid() | {error, Reason}
get_members(Name) -> [pid()] | {error, {no_such_group, Name}}

1.2. Может быть, вы могли бы разделить все пространство на меньшие области, и каждый регион принял размер, и только лидер области содержит информацию.

1 голос
/ 21 февраля 2012

Anything Process, действующий как Central Man в приложении, представляет собой бутылочное горлышко.Всякий раз, когда я сталкиваюсь с таким сценарием, я вовлекаю ETS Tables.Сначала рассмотрим этот Вопрос и его Ответ .Обычно этот тип хранилища обеспечивает надлежащий и надежный доступ к структурам данных в приложении Erlang.Без ETS Tables ваше приложение не может выходить за пределы определенной длины Списка, Массива или множества и т. Д., В которых вы храните Pids.

Кроме того, центральный процесс может умереть и все государство потеряно.Таблицы ETS обеспечивают способ обработки ситуации, когда происходит сбой владельца таблицы, когда таблица может быть фактически передана другому процессу в диапазоне.Список или массив в процессе приложения могут увеличиваться в длине или размере, при которых поиск, поиск и / или удаление из них могут быть очень трудоемкими процедурами.Избавьтесь от стресса, посмотрите на ETS Tables и все, что с ними связано, и вы наберете скорость через несколько минут (или часов в зависимости от сложности вашей задачи).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...