Нужен ли OTP, если мое состояние не меняется?

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

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

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

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

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам