本文主要是介绍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
这篇关于erlang中的message发送的几个事实的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!