如果我的州不改变,是否需要OTP?

时间:2011-03-02 22:45:58

标签: erlang

我有一个erlang项目,其状态完全是只读的,由ets表和compiled module组成。代码启动时构建表需要几秒钟。

打包它的最佳方法是什么,以便其他应用程序可以使用它?

还需要考虑其他一些事项:

  • 没有数据争用问题或更改状态,因此好像不需要gen_server。
  • 我希望能够致电application:start/1并让事情“正常”。
  • 某些进程应该拥有ets表。看起来我不应该把它留给客户端代码。

上面让我认为我应该创建一个应用程序,并从主管的init/1函数中调用设置代码,但我不确定这是否是一种愚蠢的方法来接近它。

2 个答案:

答案 0 :(得分:5)

如果模块完全是静态的,那么在这样的应用程序中不需要任何进程。如果在OTP中实现application行为,您应该能够将ETS表直接连接到主应用程序进程(启动应用程序start/2回调中的表)。这样,您将拥有最小的流程模型,允许您跳过supervisor和任何gen_server

你当然应该使用OTP,但这并不意味着你绝对必须拥有supervisorgen_server

使用appmon查看应用程序的流程层次结构。

答案 1 :(得分:2)

将其作为标准OTP应用程序包装。 gen_server不是关于维护状态,而是关于拥有一个可以处理请求的服务器(由于某种原因,它不被称为gen_state))。创建一个OTP应用程序,让人们以与其他任何人相同的方式使用它。