mpm*_*mpm 30
Pid是进程标识符.您可以在创建新流程时获得一个spawn,或者您可以获得自己的Pid self().它允许您与给定的流程进行交互.特别是通过发送消息给它Pid ! Message.还有其他一些东西,比如明确地(不应该)杀死它或者获取一些过程信息erlang:process_info.
你可以创建一个过程之间的关系erlang:link(Pid)和erlang:monitor(process, Pid)(这之间Pid的过程,流程执行此功能).简而言之,它会在另一个进程终止时为您提供"通知".
参考仅仅是几乎唯一值(不同类型).有人可能会说,它为你提供了一些现在和现在的参考,你可以在以后认识到这一点.例如,如果我们向另一个进程发送消息,并且我们期望得到响应,我们希望确保我们将收到的消息与我们的请求相关联,而不仅仅是来自其他人的任何消息.最简单的方法是使用唯一值标记消息,并等待具有完全相同标记的响应.
Tag = make_ref(),
Pid ! {Tag, Message},
receive
{Tag, Response} ->
....
Run Code Online (Sandbox Code Playgroud)
在这段代码中,使用模式匹配,我们确保(我们等待接收)直接发送Response给Message我们.无论来自其他进程的其他消息.这是您可以遇到的最常见的参考用途.
现在又回来了monitor.在调用时,Ref = monitor(process, Pid)我们与Pid进程建立这种特殊连接. Ref返回的只是一些独特的引用,我们可以用于demonitor此过程.就这些.
有人可能会问,如果我们能够创建监视器Pid,为什么我们需要Ref进行监控?我们不能Pid再次使用了.理论上我们可以,但监视器以这样的方式实现,可以在两个相同的进程之间建立多个监视器.因此,在进行恶魔控制时,我们必须只删除其中一个这样的连接.它以这种方式完成,使监控更加透明.如果您具有创建和删除一个监视器的函数库,则您不希望干扰它们可能正在使用的其他库和函数以及监视器.