Нужен ли 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 и позвольте людям использовать его так же, как и любое другое.