工人流程死亡时的数据持久性如何?

时间:2010-11-13 11:57:44

标签: erlang otp

我有工作流程需要收集/计算数据作为启动时的参数。然后在重新启动时也需要这样做。我应该在哪里放置初始化代码?在主管内部初始?或者在模块start_link或init中?在这方面,Erlang是否有最佳实践?

1 个答案:

答案 0 :(得分:2)

如果gen_server组件具有临界状态或无法重新计算/重新收集的状态,我通常会避免将状态保留在gen_server本身。我改为选择在外部进程/ ets表中维护状态。如果您采用这种方法,请确保ets表由外部进程(您确定不会死)创建,例如,应用程序进程 - 或 - 在init方法中创建ets表。 gen_server并使用“ets:give_away / 3”方法将其移交给外部进程(当然,您需要检查表是否已在gen_server的init方法中创建)。否则ets表将被销毁当过程死亡时..