Erlang Hot Code Swapping vs解释语言

时间:2016-08-12 12:21:06

标签: erlang hotswap

广泛宣传Erlang的功能是它能够在应用程序运行时热交换代码模块,并且显示为其他语言所不具备的独特杀手功能。

以下是Joe Armstrong's book的引用:

  

大多数服务器执行固定程序,并且   如果要修改服务器的行为,则必须停止服务器   然后使用修改后的代码重新启动它。

尽管在Web开发环境中,大多数语言都支持所谓的代码热插拔,即使没有调用它也是如此。它只是通过git或持续集成解决方案更新代码并在网上发布。

我知道Erlang在除了web之外的域中有很多应用程序,所以我确信在这些情况下它是有意义的。

但是,与用于Web的动态语言(如Python,Ruby,JavaScript)相比,此功能是否具有优势? Web开发的哪些案例优于流行的面向Web的语言?

2 个答案:

答案 0 :(得分:2)

erlang中的热代码交换提供的不仅仅是升级代码的能力(我不会与python,ruby或javascript进行任何比较,我对它们的了解非常有限)

  • 您可以为每个节点决定何时加载新版本的代码
  • 然后VM中将出现2个版本的代码,所有正在运行的进程将使用每个模块的旧版本,直到对该模块进行下一次完全限定的调用(Mod:Func / arity)
  • 如果您正在使用OTP行为,将首先使用code_change call_back调用服务器(或fsm或gen_event),在参数中接收旧版本的模块。因此,可以检查是否可以管理升级,并在真正跳转到新代码之前对状态数据,ETS,进程同步执行任何必要的操作。
  • 如果您没有使用OTP行为,仍然可以接收{system, From, Req}格式的消息,然后拨打sys:handle_system_msg/6,然后调用code_change call_back。

答案 1 :(得分:0)

此功能并非针对Web开发,因为Erlang本身并非专门针对Web开发而创建。

此功能优于用于Web的常规动态语言中使用的模型的一个可能区域是对代码升级方式的精确控制。

  • 代码不仅可以在通话之间更新,还可以在通话期间更新
  • 您可以为与呼叫相关的状态提供明确的升级路径