【发布时间】:2016-08-21 11:24:12
【问题描述】:
我是erlang 的新手,所以我对gen_server 有疑问。我仍然不清楚code_change() 函数是如何工作的?
你能给我解释一下吗?
谢谢和最好的问候。
【问题讨论】:
-
非常感谢,我已经解决了:)
标签: erlang distributed gen-server gen-event
我是erlang 的新手,所以我对gen_server 有疑问。我仍然不清楚code_change() 函数是如何工作的?
你能给我解释一下吗?
谢谢和最好的问候。
【问题讨论】:
标签: erlang distributed gen-server gen-event
这真的很容易。当gen_server 运行时,它包含在调用之间传递的状态(handle_call、handle_cast 和handle_info 的最后一个参数)。如果这是一个包含两个元素 {a, b} 的元组,并且您使用 release handler 进行热代码升级,并说新代码需要包含三个元素 {a, b, c} 的元组,那么您需要在新代码使用旧代码之前转换状态状态。
您可以使用code_change 来执行此操作。在Release Handling Instructions 中指定update 指令,然后当Release Handler 升级活动节点上的代码时,它会调用code_change 函数来转换状态。在转换状态时,进程会暂停,然后以新状态恢复。
如果您不使用 Release Handler 在活动节点上进行发布升级,您可能不需要担心这一点。即便如此,它也仅在必须更改状态格式时使用,这种情况并不常见。
【讨论】: