2010-11-13 73 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表將被銷燬當進程死掉..