Процесс менеджера событий в erlang. Именованные процессы или PID?

У меня есть процесс диспетчера событий, который отправляет события подписчикам (например, http_session_created, http_sesssion_destroyed). Если вместо именованного процесса используется Pid, ​​я должен поместить его в функции для работы с менеджером событий, но если используется именованный процесс, код будет более понятным.

Какой вариант правильный?

Спасибо!


person Kirill Trofimov    schedule 26.10.2009    source источник


Ответы (2)


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

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

person rvirding    schedule 26.10.2009
comment
Перенеся ссылку на диспетчер событий в запись в своем штате, вы по-прежнему можете использовать атом для зарегистрированного имени в этом поле. Таким образом, если диспетчер событий выйдет из строя и будет перезапущен, снова приняв это имя, вы автоматически отправите события новейшему диспетчеру. Вы рискуете получить исключение badarg только в том случае, если отправите сообщение во время простоя менеджера событий. - person Christian; 31.10.2009
comment
Конечно вы можете. Мне по-прежнему не нравится давать вещам глобальные имена, если они не предназначены для глобальных ссылок, я не могу сказать из исходного вопроса, так ли это. - person rvirding; 31.10.2009

Если у вас есть фиксированный набор процессов «подписчика», используйте зарегистрированные имена IMO.

Если, напротив, у вас есть архитектура типа публикации/подписки, в которой подписчики приходят и уходят, то вам нужна инфраструктура для их отслеживания, и с этого момента не имеет большого значения, используете ли вы Pid() или имена.

Один из недостатков использования зарегистрированных имен заключается в том, что вам необходимо отслеживать их в базе кода, чтобы избежать «коллизий». Так что решать вам: лично я предпочитаю именованные процессы, поскольку, как вы говорите, это делает чтение кода более понятным. Так или иначе, OTP это не волнует.

person jldupont    schedule 26.10.2009