В Erlang, как использование зарегистрированных процессов отличается от глобальных переменных в традиционном языке? - PullRequest
3 голосов
/ 22 февраля 2010

Мне кажется, что это одно и то же, просто зарегистрированные процессы замаскированы терминологией "актеры".

Обновление:

С тех пор я видел ошибку в своем мышлении. Я предполагаю, что, поскольку я новичок в Erlang, я использовал актеров в местах, где они вообще не принадлежали (есть ли где-нибудь имя для паттерна?)

Ответы [ 2 ]

7 голосов
/ 23 февраля 2010

Я часто вижу примеры использования процесса регистрации для упрощения примера кода (избегая другого параметра функции). Это приводит к тому, что новички, как правило, используют весь процесс регистрации (обезьяна видит, обезьяна делает).

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

Реестр должен использоваться для (ладно, это мои собственные правила, когда их использовать):

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

Зарегистрированные имена должны иметь префикс (обычно это имя приложения), а долго работающие приложения должны быть в файле OTP .app.

5 голосов
/ 22 февраля 2010

Зарегистрированные процессы являются глобальными идентификаторами для идентификатора процесса (Pid), который сам по себе является глобальным способом адресации процесса (он просто заранее неизвестен).

Однако утверждение, что использование глобального идентификатора - это то же самое, что глобальная переменная, ставит вопрос в тупик. Это похоже на что-то вроде «URI - это глобальные переменные». Существуют фундаментальные различия с точки зрения объема, изменчивости, инкапсуляции и изоляции данных, которые делают их действительно разными.

Обратите внимание, что модель актора - это общее понятие о параллельных вычислениях. Процессы Эрланга являются лишь одним из многих потенциальных способов реализации актерской модели. Scala, E, Axum и многие другие языки поддерживают программирование с актерами, но реализации довольно разные.

...