我是Elixir的新手,我有一堆正在运行的进程,我需要从另一个进程向所有这些进程广播一条消息。在查阅Process的文档之后,我仍然不知道该如何实现。
这可能不是最好的比较,但是是否有Java中的“ notifyAll”之类的功能?
答案 0 :(得分:2)
这种方法(在注释中描述)首先容易受到原子DDOS的攻击。 2M的骨架会杀死您的 Erlang VM ,因为原子不会被垃圾收集。另外,如Kernel.spawn/3
所述,生成不受监视的进程也不是一个好主意。
通常,您使用DynamicSupervisor
来监督孩子,它公开了which_children/1
,可以轻松枚举并向所有孩子发送消息。
另一种方法是使用:pg
erlang模块。让您的骨架加入进程组并向所有成员发送消息。
在:pg
或 Phoenix.PubSub
之上还可以使用Envio
抽象来简化 PubSub 模式的实现。
如果您仍然希望使用spawn/3
的初始方法,请启动专门的过程以跟踪所有框架(它们可能会在启动时向其发送“类似注册信息”的消息)并通过此过程中产生的所有骨骼,发送所有消息。