Erlang example——创建进程和进程通信

1.知识引入

(1)创建进程:spawn(Module , Function , Arguments),返回新进程的pid

(2)给进程发送消息:Pid ! Message。其中Pid绑定的是接收者的pid,Message是消息,消息会发送到接收者的邮箱中。

(3)接受消息:receive子句。具体用法参考下述代码和例子。

receive
    Pattern1 when Guard1 -> exp11, .., exp1n; 
    Pattern2 when Guard2 -> exp21, .., exp2n;
    ...
    Other -> expn1, .., expnn 
end

2.例子

-module (test).
-export ([start/0, loop/0]).

start() ->
    ChildPid = spawn (test, loop, []),
    ChildPid ! {self(), hello},
    receive
        {Pid, Msg} ->
            io:format("~w~n", [Msg])
    end,
    ChildPid ! stop.
        
loop() ->
    receive
        {From, Msg} ->
            From ! {self(), Msg},
            loop();
        stop ->
            done
    end.

编译后调用test:start(),流程如下:

父进程进入start()函数后创建子进程(line5),子进程执行test模块的loop函数,子进程遇到receive子句时(line14)检查其邮箱是否有消息,发现为空(因为尚无发给它的消息)于是挂起。而父进程创建子进程后向子进程发送一则消息(line6),注意这则消息包含了父进程的pid(通过self()函数获取),随后父进程遇到receive子句(line7)挂起。子进程收到来自父进程的消息后结束挂起,通过模式匹配进入{From,Msg}子句,向父进程发送一则消息(line16)随后执行loop()继续等待消息。因等待消息而挂起的父进程收到子进程的消息后激活,父进程通过模式匹配进入到相应子句输出信息(line9),然后向子进程发送一则消息,通知子进程结束。子进程收到此消息进入到stop子句(line18),结束任务。


初学Erlang,烦请指教^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值