erlang 学习 实现进程间的通信

Erlang中实现进程间通信的方式是通过消息传递。每个进程都有一个唯一的进程标识符(PID),可以使用PID向其他进程发送消息,也可以接收其他进程发送的消息。当一个进程挂掉时,其他进程不会自动跟着挂掉,因为Erlang采用了进程隔离的机制,每个进程都独立运行在自己的虚拟机中。如果一个进程挂掉了,其他进程可以通过监视(link)机制来检测到该进程的退出,并做出相应的处理。例如,可以重新启动一个新的进程来替代挂掉的进程。

所以,当一个进程挂掉了,其他进程可以通过监视机制来得知,然后根据需要进行相应的处理,而不会自动跟着挂掉。这种进程隔离的机制使得Erlang具有很好的容错性和鲁棒性,能够保证系统的稳定性和可靠性。

进程的双向监控link

-module(link).
-author("DQ").

%% API
-export([start/0]).

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

loop_link(Pid) ->
  process_flag(trap_exit, true),
  erlang:link(Pid),
  receive
    Msg ->
      io:format("pid exit: ~p~n", [Msg])
  end.

loop() ->
  process_flag(trap_exit, true),
  receive
    Msg ->
      io:format("pid2 exit: ~p~n", [Msg])
  end.

测试结果

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值