code_change() 函数如何在 gen_server 模块中工作?
How code_change() function work in gen_server module?
我是erlang
的新手,所以我对gen_server
有疑问。我仍然不清楚 code_change()
函数是如何工作的?
你能帮我解释一下吗?
谢谢并致以最诚挚的问候。
真的很容易。当 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 在实时节点上进行发布升级,您可能不需要担心这一点。即便如此,它也仅在必须更改状态格式时才使用,这种情况并不经常发生。
我是erlang
的新手,所以我对gen_server
有疑问。我仍然不清楚 code_change()
函数是如何工作的?
你能帮我解释一下吗?
谢谢并致以最诚挚的问候。
真的很容易。当 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 在实时节点上进行发布升级,您可能不需要担心这一点。即便如此,它也仅在必须更改状态格式时才使用,这种情况并不经常发生。