我现在正在研究 Erlang 的流程模型。我在有关 Erlang的技术报告(第 3 节第 2 段)中遇到了问题:
这解释了为什么在某些情况下运行多个 SMP VM 和一个调度程序而不是在一个 SMP VM 上运行多个调度程序会更有效。当然,多个虚拟机的运行要求应用程序可以运行在许多并行任务中,这些任务彼此之间没有或只有很少的通信。
现在这一段让我感到困惑;我可以看到单进程多调度程序场景,但我没有看到单个调度程序的多个进程;大概每个进程都有一个不同的节点名称,这意味着某个应用程序未经修改就不能与该模型一起使用;报告中提到了不需要修改的优点,这是 SMP 的一个关键特征。如果多个进程具有相同的节点名称,那么由于 Erlang 进程间消息传递风暴,性能将是灾难性的——假设使用内存中的 amnesia。是否有一些本文没有介绍的流程模型,而我在这里遗漏了这些模型?
作者想在这里说什么?他是否试图建议必须为多进程单调度程序案例重写应用程序(以考虑多个唯一节点名称)?
-- 编辑 1:澄清问题的根源 --
该问题已通过讨论得到解答;以下是我遇到的麻烦的概述。
这个问题的问题是,我记得,文档没有涉及在每台物理机器上运行多个 Erlang 模拟器的场景——它一直显示模拟器代表你的物理机器(在工业用途中);此外,从未考虑过必须显式划分程序以提高计算效率的情况。这种突然的介绍是我痛苦的根源。
该约定仍然偏向于创建大量进程,并且未来将为 Erlang 的 SMP 仿真器进行许多改进,这意味着假设有利的应用程序设计,每台机器单个节点仍然是一个非常可行的选择。