ska*_*tek 8 erlang erlang-otp erlang-supervisor
我有一个N工人流程的主管.像往常一样,主管可以向工作进程发送消息,并且有handle_cast一个工作人员向主管发送回复.
我怎样才能确定所有N名工人是否已经回复了主管?是否可以通过任何类型的事件处理来实现这一点 - 即告诉主管"好的,每个人都回复了"并且不让主管在某种ETS中每秒检查"所有N个进程已经回复"状态子注册表?
如果您正在谈论OTP supervisor,那么您无法通过它向工作人员发送消息.主管是一种非常有限的行为,其目的是启动,监视,重新启动和停止进程.没有其他的.
因此,要解决您的特定问题,您必须拥有一个负责向所有工作人员发送消息的流程.此过程还可以保留所有处于其状态的工人的列表,"勾选"(或从列表中删除)已响应的工作人员.您可以通过PID列表实现此目的,并接收来自流程的响应(或者通过监视流程,erlang:monitor/2如果它们在完成后退出)并查看谁离开了.