erlang 分布式的程序

-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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值