发送消息到所有进程

时间:2020-05-15 12:38:15

标签: erlang elixir

我是Elixir的新手,我有一堆正在运行的进程,我需要从另一个进程向所有这些进程广播一条消息。在查阅Process的文档之后,我仍然不知道该如何实现。

这可能不是最好的比较,但是是否有Java中的“ notifyAll”之类的功能?

1 个答案:

答案 0 :(得分:2)

这种方法(在注释中描述)首先容易受到原子DDOS的攻击。 2M的骨架会杀死您的 Erlang VM ,因为原子不会被垃圾收集。另外,如Kernel.spawn/3所述,生成不受监视的进程也不是一个好主意。

通常,您使用DynamicSupervisor来监督孩子,它公开了which_children/1,可以轻松枚举并向所有孩子发送消息。

另一种方法是使用:pg 模块。让您的骨架加入进程组并向所有成员发送消息。

:pg Phoenix.PubSub之上还可以使用Envio抽象来简化 PubSub 模式的实现。


如果您仍然希望使用spawn/3的初始方法,请启动专门的过程以跟踪所有框架(它们可能会在启动时向其发送“类似注册信息”的消息)并通过此过程中产生的所有骨骼,发送所有消息。