`
argan
  • 浏览: 129568 次
  • 性别: 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
分享到:
评论

相关推荐

    erlang使用post方式发送json数据

    学习erlang的时候尝试编写的小例子,使用post方式发送json数据来进行http请求,希望能帮到大家~

    erlang中文基础教程

    例如,用户可以创建一个模块,定义一个函数来实现某个计算任务,然后在 Erlang Shell 中调用该函数来实现任务。 4. 编译和运行 在 Erlang 中,用户需要编译模块然后才能运行。编译模块可以使用 c() 函数,例如 c...

    Erlang并发编程,Erlang程序设计,Erlang中文手册

     Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。 使用Erlang编写出的应用运行时...

    erlang 中文基础教程

    Erlang Shell是Erlang编程语言提供的一种交互式编程环境,允许开发者直接在命令行中编写、执行Erlang代码并观察结果。无论是Linux、UNIX还是Windows操作系统,Erlang Shell都能顺利运行。只需在命令行中输入`erl`...

    Erlang中文手册.pdf

    - **1.2.2 模块和函数**:Erlang代码被组织在模块中,每个模块可以包含许多函数。 - **1.2.3 元子(Atoms)**:Atoms是带有文字名称的常量。 - **1.2.4 元组**:元组是由不同数据类型组成的集合。 - **1.2.5 列表**:...

    硝烟中的erlang

    诊断以及调试生产环境中的Erlang 系统。在程序员学习新的语言和环境时,都需要一个摸索 阶段,也就是学会在社团的帮助下,脱离指南,解决实际问题。 本书假设读者精通基本的Erlang和OTP框架。在本书中,会对一些难以...

    Erlang官网下载过慢

    在Erlang和RabbitMQ的异步通信中,主要涉及以下几个概念: - 生产者(Producer):发送消息的应用。 - 消费者(Consumer):接收并处理消息的应用。 - 队列(Queue):存储消息的缓冲区,可以视为生产者和消费者之间...

    Erlang 中的Module级别热部署

    在提供的部分内容中,我们有一个简单的Erlang示例,展示了如何在多个进程中实现热部署。 ```erlang -module(codereload). -export([main/0, master_loop/2, worker_loop/0]). -define(VERSION, "0.1"). main() ->...

    erlang编程 Introducing Erlang

    Erlang中的链接(Linking)和监控(Monitoring)机制允许进程间建立关系,以便在另一进程崩溃时得到通知。链接用于追踪相关进程的状态,而监控则可以观察进程的生存状态。 ### 5. 消息传递 Erlang的进程间通信主要...

    erlang 中文乱码

    要解决Erlang中的中文乱码问题,你需要确保以下几个方面都正确无误: 1. **文件编码**:确认你要处理的文件是以正确的编码(如UTF-8)保存的。可以使用诸如Notepad++之类的文本编辑器检查和转换文件编码。 2. **...

    erlang9.rar

    标题中的"erlang9.rar"是一个压缩文件,包含了Erlang 9的Windows 64位安装程序。"otp_win64_20.0.exe"是实际的安装文件,这意味着尽管标题提到了Erlang9,但压缩包内提供的实际上是OTP的20.0版本。这可能是由于在...

    erlang 中进程

    在Erlang中,进程是并发执行的基本单元,它们轻量级且独立,彼此通过消息传递进行通信。下面将详细介绍Erlang中的进程以及如何使用它们进行并发开发。 1. 进程概念 在Erlang中,进程不同于操作系统中的线程或进程。...

    erlang中dns解析

    这篇博客(虽然链接不可用)可能讨论了如何在Erlang环境中实现这个过程。以下是关于Erlang中DNS解析的一些核心知识点: 1. **inet** 模块:Erlang的标准库包含了`inet`模块,它提供了一系列的函数用于网络相关的...

    在erlang项目中使用protobuf例子

    由于无法直接访问这个链接,我将基于protobuf在Erlang中的常见用法来解释相关知识点。 1. **protobuf安装与编译**:首先,你需要在Erlang项目中安装protobuf的Erlang库,这通常通过rebar3或erlang.mk等构建工具完成...

    Erlang_CNode用户指

    Erlang_CNode用户指南通常会涵盖以下几个核心主题: 1. **安装和配置**:指导用户如何在系统上安装Erlang VM和CNode所需的所有依赖项,包括设置环境变量,确保编译器和链接器正确配置。 2. **创建CNode**:详细...

    <27>erlang record

    在Erlang中,Records是由一个特殊的语法创建的,形如`#record_name{field1 = value1, field2 = value2, ...}`。Record_name是记录的名称,field1、field2等是记录的字段,value1、value2等则是这些字段对应的值。...

    erlang port driver test

    这个文件可能包含了与 Erlang 进程通信的接口函数,以及处理从 Erlang 发送的数据和向 Erlang 返回结果的逻辑。 总的来说,这个项目是为了验证和优化 Erlang 在 Linux 环境下通过 Port Driver 与外部程序交互的能力...

    Erlang中文手册

    - **发送消息**: 使用 `send(PID, Message)` 向指定进程发送消息。 - **接收消息**: 使用 `receive` 语句从进程的邮箱中接收消息。 - **模式匹配**: 在 `receive` 语句中使用模式匹配来处理接收到的消息。 - **...

Global site tag (gtag.js) - Google Analytics