Pid ! Msg
用于消息发送,它的意思是,向进程id为Pid的进程发送消息,该消息为Msg。例如
Pid ! {inch,3}
表示向进程id为Pid的进程发送消息{inch,3}
在消息发送之前,消息中的所有参数都会被求值。
因此:
Pid !{2,5*6}
发送的消息是:Pid !{2,30}
receive原语用于接收消息。receive语法如下:
receive
Message1 >
... ;
Message2 >
... ;
...
end这里要注意,end前面的语句没有;这表示尝试接收一个由Message1、Message2等模式之一描述的消息。对该原语进行求值的进程将被挂起,直至接收到一个与Message1、Message2等模式匹配的消息。一旦找到一个匹配,即对“->”右侧的代码求值。
接收到消息后,消息接收模式中的所有未绑定变量都被绑定。
receive的返回值是被匹配上的接收选项所对应的语句序列的求值结果。
我们可以简单认为send发生一条消息而receive接收一条消息,然而更准确的描述则是send将一条消息发送至一个进程的邮箱,而receive尝试从当前进程的邮箱中取出一条消息。
receive是有选择性的,也就是说,它从等候接收进程关注的消息队列中取走第一条与消息模式相匹配的消息。如果找不到与接收模式相匹配的消息,则进程继续挂起直至下一条消息到来——未匹配的消息被保存用于后续处理。
Erlang中,使用Pid ! Msg的方式向指定进程发送消息,如Pid ! {inch, 3}。消息在发送前会被求值。接收消息则通过receive原语,等待匹配的消息模式。如果找不到匹配项,进程会挂起直到收到匹配的消息。receive操作是从进程邮箱中取出匹配的消息,并且是选择性的,只取出关注的消息队列中第一条匹配的消息。"
133120906,19991327,HTTP协议详解:基础原理与通信流程,"['网络协议', 'HTTP', '信息与通信']
2103

被折叠的 条评论
为什么被折叠?



