- 浏览: 27171 次
- 性别:
- 来自: 广州
最新评论
编写一个程序,它生成N个进程并相连成环,。一旦启动,这些进程会绕环发送M个消息,然后当收到推出消息的时候正常终止。你可以调用rings:start(N,M,Msg)来启动环。
有两种策略可以完成这个练习,第一种是通过一个中央进程,它设置环并启动发送消息。第二种方法是换里面的新进程产生下一个进程。在编写程序的时候,请确保你的代码在每一个循环迭代中都有很多io:format声明,以检测到底什么发生了,什么没有发生。
http://www.sics.se/~joe/ericsson/du98024.html
不用使用中央管理来标记各个进程,不用保存,看上去好看很多
有两种策略可以完成这个练习,第一种是通过一个中央进程,它设置环并启动发送消息。第二种方法是换里面的新进程产生下一个进程。在编写程序的时候,请确保你的代码在每一个循环迭代中都有很多io:format声明,以检测到底什么发生了,什么没有发生。
http://www.sics.se/~joe/ericsson/du98024.html
-module(zog). %% This is a test program that first creates N processes (that are %% "connected" in a ring) and then sends M messages in that ring. %% %% - September 1998 %% - roland -export([start/0, start/1, start/2]). -export([run/2, process/1]). % Local exports - ouch start() -> start(16000). start(N) -> start(N, 1000000). start(N, M) -> spawn(?MODULE, run, [N, M]). run(N, M) when N < 1 -> io:format("Must be at least 1 process~n", []), 0.0; run(N, M) -> statistics(wall_clock), Pid = setup(N-1, self()), {_,T1} = statistics(wall_clock), io:format("Setup : ~w s", [T1/1000]), case N of 1 -> io:format(" (0 spawns)~n", []); _ -> io:format(" (~w us per spawn) (~w spawns)~n", [1000*T1/(N-1), N-1]) end, statistics(wall_clock), Pid ! M, K = process(Pid), {_,T2} = statistics(wall_clock), Time = 1000*T2/(M+K), io:format("Run : ~w s (~w us per msg) (~w msgs)~n", [T2/1000, Time, (M+K)]), Time. setup(0, OldPid) -> OldPid; setup(N, OldPid) -> NewPid = spawn(?MODULE, process, [OldPid]), setup(N-1, NewPid). process(Pid) -> receive M -> Pid ! M-1, if M < 0 -> -M; true -> process(Pid) end end.
不用使用中央管理来标记各个进程,不用保存,看上去好看很多
发表评论
-
Erlang 简单的节点互连
2014-03-19 23:41 481自己写的游戏跨服初步构架,以后再一点点完善,先记下时间线哈。 ... -
简单erlang节点互连实验
2014-03-10 15:53 684如果erlang:节点test1,test2互连接: 1.节点 ... -
Erlang OTP gen_event (1)
2014-02-26 15:06 1007演示gen_event的运行过程: mod_event_ma ... -
Erlang OTP gen_event (0)
2014-02-26 14:30 1138原英文文档:http://www.erlang.org/erl ... -
erlang efficient guide 3
2013-08-19 22:19 1053* 3 Common Caveats * 3常见 ... -
erlang efficient guide 2
2013-08-18 01:02 8252 The Eight Myths of Erlang Per ... -
fun还是如以前一样狂跩吊么?
2013-08-16 22:26 581fun这么好用。为什么老大在最近都说不要用? gen:cal ... -
emacs 的erlang-flymake
2013-08-14 15:15 1412emacs 设置erlang-flymake erlang- ... -
erlang ets
2013-07-22 23:08 1787参见:http://www.cnblogs.com ... -
erlang的编程规范
2013-03-26 17:17 1879Programming Rules and Conventio ... -
Erlang------Mnesia
2013-03-25 12:49 1657读erlang编程指南Mnesia笔记: 1.mnesia 是 ... -
匿名函数fun
2012-12-15 16:12 763lists:map(fun/1,[1,2,3]). 小试匿名函 ... -
并发编程实战otp--open telecom platform 二
2012-10-10 23:17 1104第二章:Erlang语言精要。 shell 的启动参数h ... -
并发编程实战otp--open telecom platform 一
2012-10-10 23:16 11481.erlang 的进程模型: 并发的基本单位是进程, ... -
learn some erlang
2012-10-09 22:54 672Erlang has this very pragm ... -
erlang语句块的简洁使用
2012-09-25 22:48 630begin end语句块的简洁使用:问题描述:将一堆人 ... -
命令式编程语言的标杆
2012-09-25 09:47 641命令式编程语言的标杆: 1.进程必须是语言的核心; 2.任何进 ... -
emacs与erlang的完美结合
2012-09-23 22:48 12331.在emacs中使用c+x c+z 启动erlang she ...
相关推荐
连环注入与监视新进程注入源码
C++编写的dll,可以防止C#程序被杀死,Win7系统亲测有效
一款美观的时间时钟html代码,正在学习html代码的能够来下在这个看看,这个无意中看到的,就拿过来分享了,不喜勿喷
进程间共享环形缓冲
多个进程利用pipe连接构成pipe ring, 利用这个环进行pipe sorting
实现全局状态的快照算法,并监控下列程序:两个进程P和Q用两个通道连成一个环,它们不断地轮转消息m。在任何一个时刻,系统中仅有一份m的拷贝。每个进程的状态是指由它接收到m的次数。P首先发送m。在某一点,P得到...
测试环形缓存的代码,用c++写的,可以作为不同进程之间的交互缓存。
理解Windows环境下创建内核对象,动态链接库以及共享内存段的过程,并利用他们实现多个生产者多个消费者进程。其中生产者每次存放一个数据,消费者拿出一个数据并计数。 补充,1、生产消费模板在那个CRBuffer的...
将NtQuerySystemInformation钩到隐藏的进程(3级环) 它可以防止任务管理器终止进程 仅在NT2000中有效。 不普遍 绕道行驶lib防止被杀 原理与HookNtQuerySystemInformation类似,将OpenProcess挂钩以防止被杀。 在...
逐步了解操作系统的各个环解,为同学以后更好的进入操作系统行业,提供基础保障。
本次实验要求利用多个共享内存(有限空间)构成的环形缓冲,将源文件复制到目标文件,实现两个进程的誊抄。
写作原因:跨进程通信的实现和理解是Android进阶中重要的一环。下面博主分享IPC一些相关知识、操作及自己在学习IPC过程中的一些理解。这一章使用Messenger实现跨进程通信,其中bindService基础部分参见Android IPC...
环形缓冲器在频发事件中的应用。。。。。。。。
逐步了解操作系统的各个环解,为同学以后更好的进入操作系统行业,提供基础保障。
利用多个共享内存(有限空间)构成的环形缓冲,将源文件复制到目标文件,实现两个进程的誊抄。 三、实验设计 3.1 开发环境 处理器:Intel Core i7-8550U CPU @ 1.80GHz × 8 操作系统类型:Ubuntu 16.04 IDE: Clion...
1. 利用多个共享内存(有限空间)构成的环形缓冲,将源文件复制到目标文件,实现两个进程的誊抄。2. 对下列参数设置不同的取值,统计程序并发执行的个体和总体执行时间,分析不同设置对缓冲效果和进程并发执行的性能...
利用多个共享内存(有限空间)构成的环形缓冲,将源文件复制到目标文件,实现两个进程的誊抄。 对下列参数设置不同的取值,统计程序并发执行的个体和总体执行时间,分析不同设置对缓冲效果和进程并发执行的性能影响...
动态路由协议IS-IS在现网有广泛的应用。组网方案中经常涉及IS-IS多进程路由互引场 景。如果在部署IS-IS协议互引的设备上没有配置路由策略,或者配置路由策略不合 理,可能会出现三层路由环路,导致业务受损。
随着数据业务的增多,同时为了解决光纤资源紧张等困难,城域的波分环网和CWDM技术的应用也在逐步增加。而传送网承载以太网作为MSTP等技术在城域传送网应用的框架和相关标准,在国际标准化组织和中国的标准组织都已经...
本程序在界面上使用了Java的swing接口函数,用矩形条表示生产者进程中待生产的产品,并设置了三个分区分别表示生产者进程待生产的产品、公共缓冲池中已生产的产品和消费者进程已消费的产品,以动画的效果动态演示了...