【问题标题】:How code_change() function work in gen_server module?code_change() 函数在 gen_server 模块中如何工作?
【发布时间】:2016-08-21 11:24:12
【问题描述】:

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

你能给我解释一下吗?

谢谢和最好的问候。

【问题讨论】:

标签: erlang distributed gen-server gen-event


【解决方案1】:

这真的很容易。当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 在活动节点上进行发布升级,您可能不需要担心这一点。即便如此,它也仅在必须更改状态格式时使用,这种情况并不常见。

【讨论】:

  • 感谢 Amiramix 的大力帮助 :)
  • 不客气!不要忘记,如果它回答了您的问题,您可以接受答案:)
猜你喜欢
  • 2019-02-24
  • 2017-01-28
  • 1970-01-01
  • 2013-01-22
  • 2020-10-28
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
相关资源
最近更新 更多