【发布时间】:2011-02-27 11:24:29
【问题描述】:
我最近在 InfoQ 上看到了一个关于 Erlang 的视频, 在该视频中,一位创作者介绍了如何替换消息循环的行为。
他只是发送一条消息,其中包含新版本消息循环代码的 lambda,然后调用它而不是再次调用旧循环。
Erlang 中的代码热交换指的是什么? 还是其他一些更原生的功能?
【问题讨论】:
标签: erlang message-loop hotswap
我最近在 InfoQ 上看到了一个关于 Erlang 的视频, 在该视频中,一位创作者介绍了如何替换消息循环的行为。
他只是发送一条消息,其中包含新版本消息循环代码的 lambda,然后调用它而不是再次调用旧循环。
Erlang 中的代码热交换指的是什么? 还是其他一些更原生的功能?
【问题讨论】:
标签: erlang message-loop hotswap
是的,erlang 服务器中的热插拔通常是指这个特性。 在 stackoverflow 问题 Achieving code swapping in Erlang’s gen_server 以及这个简洁的 Erlang Generic Server tutorial 或 this little one 中都有很好的解释。
Erlang/OTP gen_server 模块通过在回调模块中实现Module:code_change/3 函数,提供了一种实现热插拔的通用方法。
这样,您可以在不关闭服务器代码的情况下升级服务器代码,或者如果某些事情没有按预期工作,则回退到以前的实现。一般来说,热插拔应该使用通用的release handler。
【讨论】: