热更原理
内存中可以保留两个版本的代码,当前版本代码'current'和老版本代码'old',一旦模块被加载就变成'current',再有一个版本过来被加载,之前的版本就变成'old',新加载的变成'current'.这时候,两个版本还是同时存在,新的请求执行的时候会使用新的版本,而老版本的代码还会被使用因为还有其他模块的调用'old'版本中。如果再进行一次热更新,这时就有第三个实例被加载,code server就会终止掉还在驻留在'old'版本代码依赖的进程.然后第三个实例成为'current',之前版本的'current'被标记成'old'.具体实现
erlang热更新相关的代码都在code模块中,有两种方式可以实现此功能:
方法1:code:load_file/1配合code:purge/1或者code:soft_purge/1
code:load_file/1 :将模块加载到内存中,内存中如果已经存在此模块代码那么将其标识为old,如果内存中已经存在标记为old的代码,则此方法会返回not_purded错误code:purge/1,清掉标记为old的代码,如果旧的代码仍然被执行,则会杀死执行进程