这个世界是并行的,我们每个人都有自己的思想,你没法知道我想什么,只能我告诉你。
在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 中文基础教程erlang 中文基础教程
学习erlang的时候尝试编写的小例子,使用post方式发送json数据来进行http请求,希望能帮到大家~
Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。 使用Erlang编写出的应用运行时...
erlang中文基础教程
诊断以及调试生产环境中的Erlang 系统。在程序员学习新的语言和环境时,都需要一个摸索 阶段,也就是学会在社团的帮助下,脱离指南,解决实际问题。 本书假设读者精通基本的Erlang和OTP框架。在本书中,会对一些难以...
Erlang/OTP R11B 文档 Erlang/OTP R11B documentation
erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent
Erlang中文手册
Erlang 中的Module级别热部署
Programming Erlang + 源码包 Erlang Programming Concurrent Programming in Erlang Joe的那篇erlang论文 efficiecy guide
ErlangB和ErlangC计算工具(exe可执行文件+excel两个) ErlangB和ErlangC计算工具(exe可执行文件+excel两个)
erlang 安装包
erlang 中文,chm参考文档
Erlang及其应用Erlang及其应用Erlang及其应用
erlang中文电子书,是最好的入门用书
erlang OTP Design Principles之Gen中文erlang OTP Design Principles之Gen中文