Erlang 中的代码热交换
我最近在 InfoQ 上看到了一个关于 Erlang 的视频, 在该视频中,一位创作者介绍了如何替换消息循环的行为。
他只是发送一条包含新版本消息循环代码的 lambda 的消息,然后调用该消息,而不是再次调用旧循环。
Erlang 中的代码热交换指的是吗? 或者这是其他一些更原生的功能?
I recently saw a video about Erlang on InfoQ,
In that video one of the creators presented how to replace the behavior of a message loop.
He was simply sending a message containing a lambda of the new version of the message loop code, which then was invoked instead of calling the old loop again.
Is that code hot swapping in Erlang reffers to?
Or is that some other more native feature?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,erlang服务器中的热插拔一般就是指这个特性。
stackoverflow问题中对此进行了很好的解释在Erlang的gen_server中实现代码交换 ,以及这个简洁的 Erlang 通用服务器教程 或 这个小东西。
Erlang/OTP
gen_server
模块提供了一个通用的通过在回调模块中实现Module:code_change/3
函数来实现热插拔。这样,您可以在不关闭服务器代码的情况下升级服务器代码,或者在某些内容未按预期工作时回退到以前的实现。一般来说,应该使用通用的发布处理程序。
Yes, hot swapping in erlang servers generally refers to this feature.
It is well explained in the stackoverflow question Achieving code swapping in Erlang’s gen_server, and also in this neat Erlang Generic Server tutorial or this little one.
The Erlang/OTP
gen_server
module provides a generic way to achieve hot swapping, by implementing aModule:code_change/3
function in the callback module.This way, you can upgrade a servers code without shutting it down, or fall back to former implementation if something does not work as expected. In general, hot swap should be put in place using the generic release handler.