我是erlang
的新手,所以我对gen_server
有疑问。我还不清楚code_change()
函数是如何工作的?
谢谢和最诚挚的问候。
答案 0 :(得分:3)
真的很容易。当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在活动节点上执行发布升级,则可能不需要担心。即便如此,只有在必须改变状态格式时才使用它,这种情况并不常见。