нужен OTP, если мое состояние не меняется? - PullRequest
2 голосов
/ 03 марта 2011

У меня есть проект erlang, состояние которого полностью доступно только для чтения и состоит из таблиц ets и скомпилированного модуля .Когда код запускается, на создание таблиц уходит несколько секунд.

Как лучше всего упаковать этот пакет, чтобы его могли использовать другие приложения?

Некоторыедругие вещи для рассмотрения:

  • Нет проблем с конфликтом данных или изменением состояния, поэтому создается впечатление, что нет необходимости в gen_server.
  • Мне нравится возможность звонить application:start/1 и что-то "просто работает".
  • Некоторому процессу должны принадлежать таблицы ets.Кажется, мне не следует оставлять это на усмотрение клиентского кода.

Вышеприведенное заставляет меня думать, что я должен создать приложение и вызвать код установки из функции init/1 супервизора, но яЯ не уверен, что это глупый способ приблизиться к нему.

Ответы [ 2 ]

5 голосов
/ 03 марта 2011

Если модуль полностью статичен, вам не понадобятся никакие процессы в таком приложении.Если вы реализуете поведение application в OTP, вы сможете подключить таблицы ETS непосредственно к основному процессу приложения (инициировать таблицы в обратном вызове приложения start/2).Таким образом, у вас будет минимальная модель процесса, позволяющая пропустить как supervisor, так и любой gen_server.

. Вы обязательно должны использовать OTP, но это не значит, что вы обязательно должны иметьsupervisor или gen_server.

Используйте appmon для просмотра иерархии процессов вашего приложения.

2 голосов
/ 03 марта 2011

Оберните это как стандартное приложение OTP.gen_server не о поддержании состояния, а о наличии сервера, который может обрабатывать запросы (он не называется gen_state по причине imho;)).Создайте приложение OTP и позвольте людям использовать его так же, как и любое другое.

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