Erlang 并发编程基础之一

    Erlang 并发编程的基础语法主要有以下三点:

    1.发送消息

    Pid ! Message

    该语句实现的功能是向Pid进程发送消息Message,Pid为新进程的进程标识符。

    2.接收消息

receive
    Pattern1 [when Guard1] -> Exp1;
    Pattern2 [when Guard2] -> Exp2;
    ...
after Time -> Exp_after
end

    当进程的邮箱中消息来到时,依次用Pattern1、Pattern2进行模式匹配,成功则执行其后的表达式。after表示当等待消息时间超过Time时,会对其后的Exp_after求值。如果不需要处理超时的话,after语句可以不用写。

    对于接收消息的进程,凡是没有成功得到匹配的会一直放在该进程的邮箱中,程序员应保证其不被填满。

    3.创建进程

    创建进程是通过调用Erlang 提供的函数spawn实现的,其形式主要有以下两种:

    (1)Pid = spawn(Fun)

    创建一个进程,并在新进程中对Fun求值,同时返回新进程的Pid。

    (2)Pid = spawn(M,F,A)

    创建一个进程,并在新进程中对模块M中的F求值,并为F提供参数A(通过将参数放入一个列表中传入),同时返回新进程的Pid。

    此外,为了方便对进程的引用,还可以使用Erlang 语言提供的函数将进程注册一个名字。

    register(name,Pid)

    将Pid进程名注册为name,便于另一进程的引用。

    使用以上介绍的原语,我们可以写出一个简单的实例,其源代码如下:

%filename: concur.erl
-module(concur).
-compile(export_all).

%以下定义进行单位转换的函数
convert({cm,X}) -> X/100;
convert({dm,X}) -> X/10.

%以下定义服务进程函数
serv_proc() ->
     %接收消息
    receive
         %匹配消息并作相应的处理后发回消息的发送者
 {From,{cm,X}} -> From!convert({cm,X}); {From,{dm,X}} -> From!convert({dm,X}); {From,Other} -> io:format("~w~n",[Other]),From!"Error" end, serv_proc(). %递归调用,循环执行服务函数
%创建新进程,返回新进程的Pidstart_serv() -> spawn(fun serv_proc/0).
%客户端函数client(Pid,X) -> Pid!{self(),X}, %给服务器发送要处理的消息,self()获取本进程的Pid receive Message -> Message %接收服务器发回的消息,并作为函数的返回值 end.

    其在交互式环境下调用和运行结果如下图:


   第3行语句调用concur模块中的start_serv/0 函数创建新进程(模拟服务器进程),并返回新进程的Pid。

   第4行语句调用concur模块中的client/2 函数向刚才新建的进程发送消息(包括本进程的Pid和需要服务进程处理的消息),并接收服务器发来的处理结果。

   微信公众号:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值