`
zhang_xzhi_xjtu
  • 浏览: 525492 次
  • 性别: 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进程模型学习PPT

    Erlang进程模型特点 一个进程可以创建数以万计的轻量级进程 每个轻量级进程仅仅完成单一功能 一个复杂的功能可以由多个轻量级进程协同完成 当遇到file或socket等阻塞的io时, 调用的轻量级进程被阻塞,整个进程不...

    Erlang进程池WorkerPool.zip

    Worker Pool 是一个Erlang进程池,其中的工作进程是Erlang的gen server模式进程。Worker Pool的目标是非常简单: 提供以透明的方式管理一批工作进程并且对分配到池中的任务尽最大努力实现负载均衡。一个 Echo 服务器...

    erlang 中进程

    关于erlang并发开发的一些例子,便于学习supersivor

    introducing erlang

    ●外部接口-Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。 ●Fail-fast(中文译为速错),即尽可能快的暴露程序中的错误。 ●面向并发的编程(COP concurrency-oriented programming) ...

    Erlang并发编程,Erlang程序设计,Erlang中文手册

    进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。 使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。

    erlang-18.3.4.7-1.el6.x86_64.rpm

    ●外部接口-Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。 ●Fail-fast(中文译为速错),即尽可能快的暴露程序中的错误。 ●面向并发的编程(COP concurrency-oriented programming) ...

    gcm-erlang, 用于Google云消息传递的Erlang应用程序.zip

    gcm-erlang, 用于Google云消息传递的Erlang应用程序 gcm 软件提供了一个用于 Google Cloud Messaging的Erlang客户机。,你可以对 gcm-erlang做什么:你可以以使用 gcm-erlang:启动几个代表由不同 GCM API keys 定义...

    Erlang安装手册

     ●外部接口-Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。  ●Fail-fast(中文译为速错),即尽可能快的暴露程序中的错误。  ●面向并发的编程(COP concurrency-oriented ...

    erlang编程 Introducing Erlang

    erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent

    erlang-18.0-win64

    Erlang是一个结构化,动态类型...使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。

    erlang文献及资料汇总

    erlang文献及资料汇总 入门资料: erlang中文手册(R11B 文档译文,最适合入门) erlang位运算与二进制解析 ...erlang 消息传递机制 文章地址:http://blog.csdn.net/mycwq/article/details/43115733

    erlang_版本24.3.4.4

    erlang 安装包

    Erlang及其应用Erlang及其应用

    Erlang及其应用Erlang及其应用Erlang及其应用

    erlpool:基于ETS的Erlang进程的Erlang循环负载均衡器

    基于ETS的Erlang进程的Erlang循环负载均衡器 erlpool做什么 Erlpool是用于Erlang进程的循环负载均衡器,主要用于与数据库连接之类的事情。 与和相比, erlpool非常简单且很小(〜100 LOC),并且没有关于工人的假设...

    evum:["Linux VM", ["Erlang 进程", ["Erlang VM"]]]

    在 Erlang VM 中将 Linux VM 作为 Erlang 进程生成。 evum 使 Linux 虚拟机成为 Erlang actor。 虽然 Linux VM 像任何其他进程(内存、系统进程、磁盘)一样拥有自己的状态,但与外部世界的所有 I/O 都是通过 ...

    歧管:快速批消息在ErlangElixir的节点之间传递

    歧管:快速批消息在ErlangElixir的节点之间传递

    varpool:Erlang进程池作为局部变量

    varpool:Erlang进程池作为局部变量

    erlang25.0 windows版本

    erlang25.0 windows版本

    erlang otp25 win安装包

    erlang otp25 win安装包

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个) ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

Global site tag (gtag.js) - Google Analytics