self()进程的理解

-module(kvs).
-export([start/0,store/2,lookup/1,test/0]).


start() -> register(kvs, Pid=spawn(fun() -> loop() end)),
            io:format("Pid = ~p~n",[Pid]).


test() ->
        receive
   {kvs, Reply} ->
      Reply
    end.
   

store(Key,Value) -> rpc({store,Key,Value}).


lookup(Key) -> rpc({lookup,Key}).


rpc(Q) -> 

    %% self() 创建的进程,该进程接收消息的语句,应该写在 self() 之后,并 在同一函数(正确)  而写在test() 里面的receive 就收不到消息了(错误的写法)

       kvs ! {self(), Q},
       receive
            {kvs,Reply} ->
         Reply
       end.


loop() ->

    %%  P1 和 P,Pid 属于同一进程,它们的值都一样,因为它们都是在Pid 进程里面创建的

        P1= self(),
       io:format("P1 = ~p~n",[P1]), 
      receive
           {From, {store,Key,Value}}->
              P= self(),
              io:format("P = ~p~n",[P]),
              io:format("From = ~p~n",[From]),
      put(Key, {ok, Value}),
      From ! {kvs, true},
      loop();
   {From, {lookup,Key}} ->
       io:format("From = ~p~n",[From]),
      From ! {kvs,get(Key)},
      loop()
      end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值