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是有选择性的,也就是说,它从等候接收进程关注的消息队列中取走第一条与消息模式相匹配的消息。如果找不到与接收模式相匹配的消息,则进程继续挂起直至下一条消息到来——未匹配的消息被保存用于后续处理。