erlang的消息发送和接收

Erlang中,使用Pid ! Msg的方式向指定进程发送消息,如Pid ! {inch, 3}。消息在发送前会被求值。接收消息则通过receive原语,等待匹配的消息模式。如果找不到匹配项,进程会挂起直到收到匹配的消息。receive操作是从进程邮箱中取出匹配的消息,并且是选择性的,只取出关注的消息队列中第一条匹配的消息。" 133120906,19991327,HTTP协议详解:基础原理与通信流程,"['网络协议', 'HTTP', '信息与通信']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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前面的语句没有;

这表示尝试接收一个由Message1Message2等模式之一描述的消息。对该原语进行求值的进程将被挂起,直至接收到一个与Message1Message2等模式匹配的消息。一旦找到一个匹配,即对“->”右侧的代码求值。

接收到消息后,消息接收模式中的所有未绑定变量都被绑定。

receive的返回值是被匹配上的接收选项所对应的语句序列的求值结果。

我们可以简单认为send发生一条消息而receive接收一条消息,然而更准确的描述则是send将一条消息发送至一个进程的邮箱,而receive尝试从当前进程的邮箱中取出一条消息

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值