`
zhang_xzhi_xjtu
  • 浏览: 536426 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Erlang的进程之间的信号传递

阅读更多
-module(testLinkProcess).
-export([test/1]).
-export([test1/0]).
-export([test2/0]).
-export([test3/0]).
-export([test4/0]).
-export([loopWithCounter/3]).

test(Num) ->
	case Num of
		1 -> spawn(testLinkProcess,test1,[]);
		2 -> spawn(testLinkProcess,test2,[]);
		3 -> spawn(testLinkProcess,test3,[]);
		4 -> spawn(testLinkProcess,test4,[]);		
		_ -> void	
	end	
.

%%2个进程都不是系统进程,相互link。
%%正常退出没有相互影响。
%%监听不到正常退出信号。
test1() ->
	spawn_link(testLinkProcess,loopWithCounter,[100, 10,true]),	
	receive
		Any -> io:format("process exit : ~p ~n",[Any])
	after 3000 ->
		io:format("no singal.~n",[])
	end,
	loopWithCounter(100,10,true)
.

%%2个进程都不是系统进程,相互link。
%%异常退出时同时退出。
%%监听不到异常退出信号。
test2() ->
	spawn_link(testLinkProcess,loopWithCounter,[100, 10,false]),	
	receive
		Any -> io:format("process exit : ~p ~n",[Any])
	after 3000 ->
		io:format("no singal.~n",[])
	end,	
	loopWithCounter(100,10,true)
.

%%2个进程有1个系统进程,相互link。
%%正常进程正常退出时系统进程不会退出。
%%系统进程可以捕获到正常退出信号。
test3() ->
	process_flag(trap_exit,true),
	spawn_link(testLinkProcess,loopWithCounter,[100, 10,true]),
	receive
		Any -> io:format("process exit : ~p ~n",[Any])
	after 3000 ->
		io:format("no singal.~n",[])
	end,	
	loopWithCounter(100,10,true)
.


%%2个进程有1个系统进程,相互link。
%%正常进程异常退出时系统进程不会退出。
%%系统进程可以捕获到异常退出信号。
test4() ->
	process_flag(trap_exit,true),
	spawn_link(testLinkProcess,loopWithCounter,[100, 10,false]),
	receive
		Any -> io:format("process exit : ~p ~n",[Any])
	after 3000 ->
		io:format("no singal.~n",[])
	end,	
	loopWithCounter(100,10,true)
.


%%Flag为true时正常执行。
%%Flag为false时抛异常。
loopWithCounter(Time,Counter,Flag) ->		
	io:format("~p ~p ~n",[self(),Counter]),
	
	receive
	after Time ->	
		case Counter>0 of
			true ->									   		
				loopWithCounter(Time,Counter-1,Flag);
			false ->				
				case Flag of
					true -> void;
					false -> 1/Counter
				end
		end			
	end
.
3
7
分享到:
评论

相关推荐

    Erlang入门:构建application练习4(进程link的作用)

    在Erlang中,进程间通信(IPC)是通过消息传递来实现的,而`link`机制是这个通信模型中非常重要的一部分。本教程将通过一个名为"bank2"的实例来探讨`link`的功能和影响。 首先,让我们理解什么是进程`link`。在...

    Concurrent Programming in ERLANG (P1-90)

    Erlang的并发模型基于轻量级进程,这些进程之间的通信主要通过消息传递来进行。每个进程都有一个独立的消息队列,并且可以通过发送消息给其他进程来启动异步任务或请求服务。这种模型非常适合实现高度并行和容错的...

    erlang 深度分析

    - **功能**: 监听Erlang进程之间的消息传递。 - **应用场景**: 调试复杂的分布式系统。 #### 22. Erlang网络程序调试 - **工具**: `erl_snooper`。 - **功能**: 监听网络消息,帮助调试网络程序。 - **应用场景**: ...

    Erlang编程规则——中文翻译版本

    Erlang中的进程是并发执行的实体,进程之间的通信主要通过消息传递实现。 SW工程原则部分强调了良好的软件工程实践对于大型项目的重要性。模块化设计应尽量减少对外部模块的依赖,保持模块间调用的清晰,避免复杂的...

    Concurrent Programming in ERLANG

    - Erlang进程的调度机制是如何工作的。 - 实时性是指系统能够及时响应外部事件的能力,而优先级则决定了进程执行的先后顺序。 **5.7 进程组** - 如何将进程组织成组。 - 进程组可以简化管理和监控多个进程的工作。 ...

    erlang并发编程中文翻译(cpie-cn).zip

    7. 轻量级:Erlang进程的创建和销毁成本低,可以在短时间内创建成千上万个进程,使得并发处理成为可能。这种轻量级的并发模型特别适合处理大量短生命周期的任务。 8. 面向连接:Erlang的并发模型强调建立和维护稳定...

    erlang并发编程 .pdf

    Erlang中的进程间通信模型简单而高效,通过消息传递来实现。同时,Erlang也支持客户端-服务端模型以及进程组的概念,允许开发者更灵活地组织和管理并发进程。 在分布式编程方面,Erlang提供了一套完整的分布式机制...

    Learn You Some Erlang for Great Good!

    在Erlang的核心概念中,“进程”(process)与传统操作系统中的进程不同,Erlang进程是轻量级的,并且每个进程都是独立的执行线程,它们之间使用消息传递(message passing)进行通信。这避免了共享内存并发模型中的...

    erlong 学习手册 pdf 版 第一个上次错误了现在补上对的

    **链接管理服务器**是Erlang中实现的一种服务,它负责管理和监控Erlang进程间的链接。链接是Erlang中进程间的一种关系,当两个进程链接时,一个进程的异常退出会触发链接到它的另一个进程收到退出信号,从而可以实现...

    www.erldoc.com:erlang 中文手册 https

    2. 信号量与屏障:Erlang不内置信号量和屏障,但可以通过消息传递和自定义协议来模拟这些同步原语。 七、Erlang的 OTP(Open Telecom Platform) OTP是Erlang的生态系统,包含一组设计原则、库和工具,如分布式服务...

    visual_erlang:描述 Erlang 架构的符号

    9. **并发与同步(Concurrency & Synchronization)**:Erlang进程间的并发是通过消息传递实现的,而非共享内存。同步可以通过消息传递和信号来控制,例如`receive`语句。在可视化中,这可以通过并行运行的进程和...

    Erlang中文手册

    - **消息传递**: Erlang的核心机制之一,用于进程间的通信。 - **发送消息**: - `Pid ! Message` 向指定的进程发送消息。 - **接收消息**: - 使用 `receive` 语句等待接收消息。 - 示例:`receive {Msg, Pid} -> ...

    erlang-systemd:用于Erlang应用程序的systemd实用程序

    Erlang 是一种高度并发、面向进程的编程语言,常用于构建分布式系统和实时软实时应用。Systemd 是一个在Linux系统中广泛使用的初始化系统,它管理着系统启动后的服务、定时任务等。`erlang-systemd` 库是专门为...

    Concepts and Notations for Concurrent Programming

    2. **通信(Communication)**:进程之间的通信是实现协同工作的关键。通信可以通过共享内存或消息传递的方式进行。共享内存模型允许多个进程访问同一段内存区域;而消息传递则通过发送和接收消息来交换数据。 3. *...

    多线程单开单停

    在E语言中,尽管它支持并发,但其轻量级进程(也称为erlang进程)的设计鼓励单个进程处理单一任务,以实现更好的并行性和容错性。 "E语言",即Erlang,是由Ericsson公司为电信系统开发的一种函数式编程语言。Erlang...

    分布式系统课件(各个章节)

    1. **进程通信**:在分布式系统中,进程通信是各个节点间交换信息和协调工作的基础。它包括多种通信机制,如消息传递(Message Passing)、共享内存、管道、套接字等。消息传递分为直接和间接通信,如RPC(Remote ...

    并行计算--并发构造纵览

    4. **MPI(Message Passing Interface)**:用于分布式计算环境,通过消息传递进行进程间通信,广泛应用于高性能计算。 5. **OpenMP**:一种在C/C++和Fortran中实现共享内存并行化的库,通过编译器指令实现多线程...

    rabbitmq-server-3.6.9.rar

    OTP(Open Telecom Platform)是Erlang的一套开发框架,提供了许多实用的库和设计模式,如进程管理、错误处理、分布式计算等。RabbitMQ选择Erlang OTP作为基础,得益于其强大的并发处理能力、热代码升级功能以及对...

Global site tag (gtag.js) - Google Analytics