2010-11-13 76 views
2

我有需要收集/计算所得数据作为启动参数工作进程。这在重新启动时也是需要的。我应该在哪里放置初始化代码?主管内部初始化?或者在模块start_link或init里面? Erlang有什么最佳实践吗?工作进程死亡时的数据持久性如何?

+0

你能不能提供更多的细节:在重新启动你想重新聚首/重新计算参数或你想保留的地方存储的参数和重用呢?最佳实践取决于我担心的确切用例。 – 2010-11-13 14:51:40

+1

我还想补充一点,我认为,从管理的数据应该是更稳定的类型。除非对所有/大部分员工有用,否则我不会在主管人员进行大规模初始化工作。一位工作人员的数据我将留给初始化。只是我的意见。 – rvirding 2010-11-13 18:01:33

+0

是的,谢谢你,我猜想有关“最佳实践”的问题有时候很难回答,没有提供个人意见。无论如何有用。 – JoGr 2010-11-15 10:00:45

回答

2

如果gen_server组件具有临界状态,或状态不能被重新计算/重新聚集,我一般避免保持状态gen_server本身。我反而选择在外部进程/ ets表中维护状态。如果您是通过这种方法去,确保ETS表要么通过externel进程(你肯定不会死)创建的,例如,应用程序 - 或者 - 的init方法创建ETS表gen_server并使用“ETS:give_away/3”的方法将它交给一个外部进程(当然,你需要检查表在gen_server的init方法已经创建)..否则ETS表将被销毁当进程死掉..