一个进程可以有两个接收块

Sin*_*ina 0 erlang process

我的工作环境是Erlang.具有2个不同功能的进程是否可以在不同功能中具有两个接收块.

receive
....
end.

request()
PID!(message)
%% Can i get the reply back here instead of the receive block above?
Run Code Online (Sandbox Code Playgroud)

rvi*_*ing 11

是的,你可以有很多receive表达方式.当评估一个时,它将从消息队列/邮箱中取出第一个匹配的消息(选择你的名字),然后将其余的留给下一个receive.使用Pid ! Message语法(唯一方式)发送消息是完全异步的,只是将消息添加到接收进程消息队列的末尾.receive接收消息的唯一方法,即将它们从消息队列中取出.你永远不能把它们放回去.

在Erlang中没有内置的同步消息传递,它是通过发送两个消息来实现的:

  • "请求"进程向接收进程发送消息,然后进入a receive以等待回复.

  • "接收"过程本身将获取消息receive,处理它,将回复消息发送回"请求"过程,然后进入receive等待下一条消息.

请记住,进程之间没有固有的连接,并且所有通信都是使用异步消息发送完成的receive.

所以在回答你的第二个问题时:你只能receive表达式中得到回复.这是唯一的方法!

很抱歉有点迂腐,但Erlang没有块或语句.它是一种函数式语言,只有表达式总是返回一个值,即使有时会忽略返回值.