【发布时间】:2018-11-06 15:21:04
【问题描述】:
Erlang 世界不像往常一样使用 try-catch。我想知道重新启动进程与主流语言中的 try-catch 时的性能如何。
Erlang 进程有它的小栈和堆概念,实际上在 OS 堆中分配。为什么重启有效?
希望有人让我深入了解 Beam 在对进程调用重新启动操作时该怎么做。
此外,如何使用gen_server 在其进程中保持状态。 gen_server重启时会导致复制状态操作吗?
谢谢
【问题讨论】:
-
如果一个 gen_server 崩溃并且它的主管启动了一个新的,它不会复制状态。关键是要回到“已知良好”状态。如果它复制了状态,数据可能已经进入损坏/错误状态,这就是它首先崩溃的原因。可以手动将状态复制到新的 gen_server,但您需要非常小心这样的事情。
-
嗨,@JustinWood,我有两个问题。 1.“已知良好”状态是init函数定义的吗? 2.进入新的初始状态会像第一次创建进程一样创建进程吗?谢谢。