Erlang 如果我的状态不变,是否需要OTP?
我有一个erlang项目,它的状态完全是只读的,由ets表和。代码启动时,构建表需要几秒钟的时间 打包此文件以便其他应用程序使用的最佳方式是什么? 需要考虑的其他事项:Erlang 如果我的状态不变,是否需要OTP?,erlang,Erlang,我有一个erlang项目,它的状态完全是只读的,由ets表和。代码启动时,构建表需要几秒钟的时间 打包此文件以便其他应用程序使用的最佳方式是什么? 需要考虑的其他事项: 没有数据争用问题或状态变化,因此似乎不需要gen_服务器 我喜欢能够调用应用程序:start/1,让事情“正常工作” 某些进程应该拥有ets表。似乎我不应该把这留给客户机代码 上述情况使我认为我应该创建一个应用程序,并从主管的init/1函数调用设置代码,但我不确定这是否是一种愚蠢的方法。将其包装为标准OTP应用程序gen\
- 没有数据争用问题或状态变化,因此似乎不需要gen_服务器
- 我喜欢能够调用
,让事情“正常工作”应用程序:start/1
- 某些进程应该拥有ets表。似乎我不应该把这留给客户机代码
上述情况使我认为我应该创建一个应用程序,并从主管的
init/1
函数调用设置代码,但我不确定这是否是一种愚蠢的方法。将其包装为标准OTP应用程序gen\u server
不是关于维护状态,而是关于拥有一个能够处理请求的服务器(出于某种原因,它没有被称为gen\u state
)。创建一个OTP应用程序,让人们以与其他任何应用程序相同的方式使用它。如果模块完全是静态的,则在这样的应用程序中不需要任何进程。如果您在OTP中实施应用程序
行为,您应该能够将ETS表直接连接到主应用程序进程(在应用程序启动/2
回调中启动表)。这样,您将拥有一个最小的流程模型,允许您跳过主管
和任何gen_服务器
您当然应该使用OTP,但这并不意味着您绝对必须有一个主管
或genu服务器
用于查看应用程序的流程层次结构。您能想到一个不应该只是常规模块的无状态
genu服务器的示例吗?在过去,我一直认为状态是使用行为的先决条件。我喜欢它!谢谢你的意见。:)我刚开始这么做,意识到开始回调需要返回{ok,Pid}
。通常Pid
引用顶级主管流程。如果在我的例子中不存在这种情况,我是否应该返回{ok,self()}
?是的,这是运行无管理应用程序时的做法。