erlang 软件升级

本文介绍了Erlang中的软件升级,特别是热更新机制。在Erlang虚拟机(VM)中,热更新可以同时维持旧版和新版代码,非限定调用使用旧代码,完全限定调用则使用新代码。当代码连续修改导致内存中有多个版本时,系统会杀死执行旧版本的进程。通过实验展示了如何进行热更新,并提到了code模块的相关函数如code:load_file/1和code:purge/1等。
摘要由CSDN通过智能技术生成

软件升级:

加载

调用一个 未加载的文件或者显示的code:load_file/1 函数调用的时候都会 触发erlang代码服务器动态加载代码

热更新

当内存中的程序需要更新的时候, erlang VM 会维持两个版本, 一个是老版本 old , 一个是新版本 new. 热更新时,驻留在旧代码中的执行会继续执行旧的代码而其他情况下执行新的代码。
具体是:当函数调用为非限定调用的时候就使用旧代码, 而在使用M:F(A) 完全限定调用的时候, 就使用新的代码。
这个时候就会出现几个问题,
1. 如果一直调用local 代码是不是就一直不更新了?
2. 如果代码连续修改了两次,现在内存中就会有三个版本v(1) v(2) v(3), 那么如果最初的版本v(1)还在执行会被怎么处理?

用下面的代码来测试一下(代码来自elrang 编程指南)

-module(mod_test).
-export([main/0, loop/0, cal/1, do/1]).
main() ->
   register(foo, spawn(mod_test, loop,[])).

loop() ->
receive
      {Sender, X} ->
      Sender ! {self(),cal(X)}
end,
loop().


do(X) ->
       foo ! {self(),X},
receive 
  {_, Y} ->
     Y
end.
cal(X) ->
        X + 1.

1> c(mod_test).
{ok,mod_test}
2> mod_test:mai

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值