Erlang热门代码加载
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Erlang热门代码加载相关的知识,希望对你有一定的参考价值。
根据Erlang文档,Code Loading,Erlang只维护2个版本的模块,当前和旧版本。 为什么它不会在代码重新加载时保留多个版本的旧代码,并且不会终止在旧代码中延迟的进程。
答案
这是一种保守的方法,可以保证在对模块进行2次升级后,您可以确定没有任何进程仍在执行该代码的旧版本。这意味着您知道旧漏洞或漏洞被刷新,并且没有代码仍然需要旧数据格式(在内存或磁盘上)或在进程之间发送/接收旧形式的消息。
最初,2版本的实现可能是因为需要能够在没有重新启动的情况下保持节点运行很长时间,并且在与当今系统相比具有相对较少RAM的硬件上,因此代码升级不应该冒泄漏内存的风险以旧模块版本的形式无法删除,因为某些进程的调用堆栈仍在引用它。虽然这仍然值得关注,但我会说我上面列出的原因是最近的原因。
因此,尽管它是一个实现细节,并且您可以拥有允许任意数量的版本在飞行中的Erlang实现,并且对未使用的代码进行自动垃圾收集,但是运行生产系统的任何人似乎都不希望这样。它只会为运行系统的状态增加一个更大的不确定窗口。 2版本的实现提供了一种简单的方法来演化系统而不会停止它。
以上是关于Erlang热门代码加载的主要内容,如果未能解决你的问题,请参考以下文章
如何在Elixir或Erlang中在运行时动态创建和加载模块?