`
argan
  • 浏览: 126454 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

erlang中的message发送的几个事实

阅读更多

这个世界是并行的,我们每个人都有自己的思想,你没法知道我想什么,只能我告诉你。

 

在erlang的世界里,每个进程有自己的状态(其实就是那些传来传去的参数,不考虑进程字典这个不干净的东西好了),无法直接将一个进程的状态分享给其他进程,只能通过消息,发送到对方的邮箱里去,看他啥时候有空处理一下。

 

erlang里发消息很简单   PID ! Message,就可以了,PID是一种数据类型,就叫process identifier,可以通过几种手段获得:

*self(),取得当前进程的PID

*通过spawn,spawn_link获得(注:spawn总是会成功,总是会返回一个PID)

*通过pid/3来够在,似乎出了在shell里其他地方没法用啊?

*别人给你一个PID

*或者,这个PID有别名(通过register(Alias,PID)注册)

 

一旦得到了PID,就可以直接发消息给他,不管他在天涯海角,不管他或者还是死亡,erlang里消息的几个事实:

*总是能发送成功,不管PID是否存在

*发送消息是异步的,立即返回

*PID ! Message,是一个合法的表达式,返回值是Message,因此往多个进程发同样的消息可以:P1!P2!P3P4!Message

*同一个进程发给另一个进程的消息保证其发送顺序

 

消息接收的过程:

*当有新的消息进来时才触发以下操作

*receive语句会从mailbox里拿出第一条消息(最老的)

*按顺序进行match,如果match上了,将从mailbox里把这条消息拿掉,然后执行pattern后的语句

*如果没有match,就执行下一条match

*如果所有pattern都没match,就取下一条消息

*如果消息都没有match任何一个pattern,这些消息将按按原来的顺序放回mailbox

 

 

 

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics