我有一个 erlang 项目,其状态完全是只读的,由 ets 表和编译模块 https://stackoverflow.com/questions/5130382/erlang-gen-server-with-a-large-state。代码启动时需要几秒钟来构建表。
打包它以供其他应用程序使用的最佳方法是什么?
其他一些需要考虑的事情:
- 不存在数据争用问题或状态变化,因此似乎不需要 gen_server。
- 我喜欢能够打电话
application:start/1
并让事情“正常工作”。
- 某些进程应该拥有 ets 表。看来我不应该把它留给客户端代码。
上面的内容让我认为我应该创建一个应用程序,并从主管的调用设置代码init/1
函数,但我不确定这是否是一种愚蠢的方法。
如果模块完全静态,则在此类应用程序中将不需要任何进程。如果您实施application
OTP 中的行为您应该能够将 ETS 表直接连接到主应用程序进程(启动应用程序中的表)start/2
打回来)。这样您将拥有一个最小的流程模型,允许您跳过supervisor
和任何gen_server
.
您当然应该使用 OTP,但这并不意味着您绝对必须拥有supervisor
or a gen_server
.
Use appmon http://www.erlang.org/doc/apps/appmon/appmon_chapter.html查看应用程序的进程层次结构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)