code_change()函数如何在gen_server模块中工作?

时间:2016-04-27 09:04:22

标签: erlang distributed gen-server gen-event

我是erlang的新手,所以我对gen_server有疑问。我还不清楚code_change()函数是如何工作的?

你能解释一下吗?

谢谢和最诚挚的问候。

1 个答案:

答案 0 :(得分:3)

真的很容易。当gen_server正在运行时,它包含一个在调用之间传递的状态(最后一个参数为handle_callhandle_casthandle_info)。如果这是一个包含两个元素{a, b}的元组,并且您使用release handler进行了热代码升级,并且说新代码需要使用三个元素{a, b, c}进行元组转换,那么您需要在状态之前转换状态新代码可以使用旧状态。

您使用code_change执行此操作。在Release Handling Instructions中指定update指令,然后,当Release Handler升级活动节点上的代码时,它会调用code_change函数来转换状态。在转换状态时,进程暂停,然后以新状态恢复。

如果您没有使用Release Handler在活动节点上执行发布升级,则可能不需要担心。即便如此,只有在必须改变状态格式时才使用它,这种情况并不常见。