当前位置: 首页 > 编程日记 > 正文

erlang supervisor simple_one_for_one实例

http://www.cnblogs.com/little-ant/p/3196201.html

simple_one_for_one vs one_for_one:

相同点:

这种Restart Strategy和one_for_one基本相同(即当一个child process挂掉后,仅仅重启该child process 而不影响其他child process)。

异同点:

1, simple_one_for_one supvisor启动时不会启动任何子进程,所有子进程都只能通过调用 supervisor:start_child(Sup, Args) 来动态启动。

2, simple_one_for_one supvisor持有child process的定义,并有一个dict存放数据, 其实就是如干个child process,共享一份数据。

3, 一个simple_one_for_one supervisor只有一个(single)simple_one_for_one的定义, 也就是说它只能生产出一种类型worker process。

supervisor:start_child(Sup, Args) :

Sup:  Supervisor的Pid或者registered Name.

Args: 当supervisor的类型是simple_one_for_one时,Args会追加到spec的参数中。

例如:

复制代码
-module(simple_sup).
-behaviour(supervisor).-export([start_link/0]).
-export([init/1]).start_link() ->supervisor:start_link({local,?MODULE}, ?MODULE, []).init(_Args) ->{M, F, A} = _Args,{ok, {{simple_one_for_one, 0, 1},[{M, {M, F, A},temporary, brutal_kill, worker, [M]}]}}.
复制代码

调用supervisor:start_child(simple_sup, Args)后,最终启动子进程的代码会是:apply(M, F, A++Args).

调用supervisor:start_child(Sup, Args)可能会遇到的错误:

1, noproc: 可能的原因是在调用supervisor:start_link时没写参数{local, ?MODULE},即上面代码红色部分,此时进程Sup并不存在,所以会产生

noproc错误。

2,undef: 可能的原因是A++Args后,与child process的start_link函数参数不一致。

实例代码:

实例包含两部分,一是监控普通进程(normal_process.erl),二是监控gen_server进程(gen_server_process.erl)。

common.hrl

%%-define(CALL, normal_process).
-define(CALL, gen_server_process).

simple_sup.erl

复制代码
-module(simple_sup).
-behaviour(supervisor).-export([start_link/0]).
-export([init/1]).-include("common.hrl").start_link() ->supervisor:start_link({local, ?MODULE}, simple_sup, []).init(_Args) ->{ok, {{simple_one_for_one, 0, 1}, [{?CALL, {?CALL, start_link, []},temporary, brutal_kill, worker, [?CALL]}]}}.
复制代码

normal_process.erl

复制代码
-module(normal_process).-export([start_link/0, start_loop/1]).start_link() ->proc_lib:start_link(?MODULE, start_loop, [self()]).start_loop(Parent) ->proc_lib:init_ack(Parent, {ok, self()}),loop().loop() ->receiveArgs ->io:format("~p~n", [Args])end.
复制代码

gen_server_process.erl

复制代码
-module(gen_server_process).
-behaviour(gen_server).
-export([start_link/0]).%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,terminate/2, code_change/3]).%% interface
-export([start/0, stop/0, echo/1]).%% interface implement
start()      -> start_link().
stop()       -> gen_server:call(?MODULE, stop).
echo(String) -> gen_server:call(?MODULE, {echo, String}).%% gen_server callbacks implement
start_link() -> gen_server:start_link({local,?MODULE}, ?MODULE, [], []).init([]) ->{ok, 0}. handle_call({echo, String}, _From, Tab) ->  Reply = String,{reply, Reply, Tab};handle_call(stop, _From, Tab) ->{stop, normal, stopped, Tab}.handle_cast(_Msg, State) -> {noreply, State}.
handle_info(_Info, State) -> {noreply, State}.
terminate(_Reason, _State) -> ok. 
code_change(_OldVsn, State, _Extra) -> {ok, State}.
复制代码

编译命令:

c(simple_sup).
c(normal_process).
c(gen_server_process).

测试命令:

simple_sup:start_link().
supervisor:start_child(simple_sup, []).

测试通过start_child启动普通进程:

修改common.hrl:-define(CALL, normal_process). 执行编译命令 + 测试命令。

测试通过start_child启动gen_server进程:

修改common.hrl:-define(CALL, gen_server_process). 执行编译命令 + 测试命令。

转载于:https://www.cnblogs.com/fvsfvs123/p/4243734.html

相关文章:

sql isnull函数的使用(转载)

sql isnull函数的使用 ISNULL 使用指定的替换值替换 NULL。 语法 ISNULL ( check_expression , replacement_value ) 参数 check_expression 将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。 replacement_value 在 check_expression 为 NULL时将返回的表达…

Error creating bean with name 'defaultHandlerMapping' defined in ServletContext resource

未解决转载于:https://www.cnblogs.com/hqsbrx/p/9969449.html

priority_queue 结构体的优先级设置

目标:使用结构体Node类型的优先队列,让其按照我们希望的顺序进行排序。 预备知识:会结构体的定义,和结构体类型的优先队列的定义,知道优先队列默认是最大堆排序(即top()得到的是最大的元素) 要做的事:在结…

PNG透明兼容IE6的几种方法

png透明针对IE6一直是件挺麻烦的事情,使用的方法也是各有不同,大多的原理是用IE的滤镜来解决的。 语法:filter : progid:DXImageTransform.Microsoft.AlphaImageLoader ( enabledbEnabled , sizingMethodsSize , srcsURL ) enabled : 可选项。…

ntohs的一个简单实现(将网络流中用两个字节16进制表示的资源数(如DNS)和长度转换为整形)...

我们知道在由于大端机和小端机导致网络字节序和主机序有可能是有差异的,我们可以使用系统的ntohs,ntohl,htons和htonl这些处理函数进行转换,下面是我写的一个关于ntohs在处理小端机字节序转换的函数的简单实现. 思想大致如下: 用u_int16_t的2字节16位的整…

循环获取结构体中的健名与值的实现

为什么80%的码农都做不了架构师&#xff1f;>>> type Person struct {Name stringAge int }func main() {a : &Person{"Name", 1}v : reflect.ValueOf(a).Elem() //a需要是引用k : v.Type()for i : 0; i < v.NumField(); i {key : k.Field(i)…

PAT(甲级)2020年春季考试 7-4 Replacement Selection

这种复杂的模拟题&#xff0c;对于我这种菜鸡&#xff0c;只能是根据自己的理解&#xff0c;去把题目给演示出来&#xff0c;然后结合测试用例&#xff0c;一点一点debug打印输出&#xff0c;的确耗时&#xff0c;所以考试要是遇到就放最后吧。 把这题做出来&#xff0c;我的一…

On/Off FlipSwitch 按钮

https://proto.io/freebies/onoff/转载于:https://www.cnblogs.com/ElvinLong/p/4253665.html

P1541 乌龟棋 题解(洛谷,动态规划递推)

题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc.h> #define ll long long using namespace std; ll num[350100]; ll p[5]; ll f[41][41][41][41]; int main() {ios::sync_with_stdio(fa…

asp.net 操作excel的实现代码

http://www.cnblogs.com/fywh/archive/2010/01/25/1655864.html转载于:https://www.cnblogs.com/modernsky2003/archive/2010/02/26/1673925.html

PAT(甲级)2020年春季考试 7-2 The Judger

这道题在模拟过程类型题种算友好的&#xff0c;很平铺直叙&#xff0c;主要就是hash的应用。 有两个小点&#xff1a; 1. 怎样快速求两个未知大小的整数a和b的差值(>0) abs(a,b) 2. 如果某一轮有不止一个人淘汰&#xff0c;应该输出 Round #1: 3 is out. Round #1: 4 …

C++_volatile限定修饰符 Pair类型

Volatile限定修饰符 当一个对象的值可能会在编译器的控制或检测之外被改变时&#xff0c;例如一个被系统时间更改的变量&#xff0c;那么这个变量就应该声明成volatile。 其主要作用是提示编译器&#xff0c;该对象的值可能在编译器未检测到的情况下被改变。因此编译器执行的某…

FWFT FIFO读操作注意

FWFT&#xff1a;First Word Fall Through的缩写&#xff0c;好像是Xilinx的说法&#xff0c;Altera对应的概念是Show-ahead synchronous(SASO)。即数据在rdreq有效之前就有效了&#xff0c;rdreq作为一个应答(ACK)。 需要注意的是当rdreq连续时&#xff0c;容易多读一个数据…

iOS图像识别

iOS通过摄像头动态识别图像 前言&#xff1a; 目前的计算机图像识别&#xff0c;透过现象看本质&#xff0c;主要分为两大类: 基于规则运算的图像识别&#xff0c;例如颜色形状等模板匹配方法基于统计的图像识别。例如机器学习ML&#xff0c;神经网络等人工智能方法**区别&…

PAT(甲级)2019年冬季考试 7-4 Cartesian Tree

这道题利用的是最小堆和中序排序的属性&#xff1a;只要知道根节点&#xff0c;就能得出哪些属于左子树&#xff0c;哪些属于右子树。 开始我一直报段错误&#xff0c;经过筛查&#xff0c;发现是创建树的函数忘记写返回语句 return root. AC代码 #include<cstdio> #i…

C#操作excel(多种方法比较)

我们在做excel资料的时候&#xff0c;通常有以下方法。 一.导入导出excel常用方法&#xff1a; 1.用查询表的方式查询并show在数据集控件上。 代码 publicstaticstringstrCon "Provider Microsoft.Jet.OLEDB.4.0 ; Data Source C:\\08.xls;Extended PropertiesExcel 8.0&…

383. Ransom Note/691. Stickers to Spell Word-- String, Map, back tracking-- 未完待续

383 easy 题&#xff0c;就是建立字母的hash 表 看第一个String 是否能被第二个String 所构建 canConstruct("aa", "aab") -> true 统计 第二个参数中每个字母的频率&#xff0c;可以用一个int[256] 建立hashmap, 然后统计 第一个String 中字母出现的…

Centos 修改时间地区及NTP同步北京时间

在我们使用CentOS系统的时候&#xff0c;也许时区经常会出现问题&#xff0c;有时候改完之后还是会出错&#xff0c;下面我们就来学习一种方法来改变这个状况。如果没有安装&#xff0c;而你使用的是 CentOS系统 那使用命令 yum install ntp 然后&#xff1a;ntpdate us.pool.n…

PAT(甲级)2019年冬季考试 7-2 Block Reversing

这题是做过的&#xff0c;B1025&#xff0c;我还总结过&#xff0c;果然早晚复相逢&#xff0c;只改了一点点&#xff0c;见1025 反转链表。 点睛之笔是结构体数组的哈希&#xff0c;地址既做下标&#xff0c;又有实际含义&#xff0c;妙啊。 node[add].add add; 当时应该是…

题目1444:More is better

时间限制&#xff1a;3 秒 内存限制&#xff1a;100 兆 特殊判题&#xff1a;否 提交&#xff1a;1362 解决&#xff1a;640 题目描述&#xff1a;Mr Wang wants some boys to help him with a project. Because the project is rather complex, the more boys come, the bette…

COMP 0137 Machine Vision

COMP 0137作业代做、Python实验作业代写、代做Python语言程序作业、代写Machine Vision作业COMP 0137 Machine Vision: Homework #1Due 19th November 2018 at 23:55pmWorth 10% of your overall gradeSubmit online, through MoodleFor this homework, we’ll revisit the pra…

windows mobile shell API

SHSetNavBarText 设置NavBar 文本信息 SHDoneButton 设置右上角button为关闭&#xff0c;还是最小化。 SHFullScreen 全屏&#xff0c;显示隐藏taskbar 软键盘button 开始图标 SHInitDialog 实例化对话框 SHInitDialogFlags 设置dialog参数…

PAT(甲级)2019年秋季考试 7-3 Postfix Expression

只在编译原理学过一点后序表达式&#xff0c;我把这题当作普通的二叉树遍历&#xff0c;事实上也的确如此。我注意到“-”这个符号不一样&#xff0c;别的都是后序遍历&#xff0c;但是遇到这个负号/减号就变成了先序。 于是我对负号做特判&#xff0c;遇到值为负号就改后序为…

(翻译)LearnVSXNow! #6 - 创建我们第一个工具集 - 序幕

在前面的文章中,我们在向导的帮助下创建了一些小的VSPackages。在第五讲中我们整理了VSX的一些思路和概念&#xff0c;深入VSPackages 了解了packages如何工作以及服务的机制。在这篇文章中我们继续向前。 本文我们开始创建一个工具集来帮助我们创建容易编写和理解的代码。我计…

Spring事务管理的底层逻辑—源码解析

本文代码为spring 5.1.2spring是如何控制事务的提交和回滚 加上Transactional注解之后&#xff0c;Spring可以启到事务控制的功能了&#xff0c;再正式执行方法前它会做一些操作&#xff0c;我们来看看 首先进入CglibAopProxy.class的intercept方法或者JdkDynamicAopProxy.clas…

[codevs 1913] 数字梯形问题

[codevs 1913] 数字梯形问题 题解&#xff1a; 本题就是加强版的 [codevs 1033] 蚯蚓的游戏问题。分别针对三个规则建图、运行最小费用最大流。规则1&#xff1a;从梯形的顶至底的m条路径互不相交。分析&#xff1a;因为要互不相交&#xff0c;所以每个点只能走一次&#xff0c…

PAT(甲级)2019年秋季考试 7-2 Merging Linked Lists

又是老朋友链表输出题&#xff0c;依然采用哈希静态存储&#xff0c;但是这题稍复杂的是&#xff0c;有两条链表&#xff0c;但是我们可以默认link1>link2&#xff0c;然后让link2上的节点接着link1后面编号&#xff0c;并且注意link2是倒序输出的。 输出时有几个关键点&am…

Flash/Flex学习笔记(4):如何打开网页及Get/Post数据

flash终究只是客户端技术&#xff0c;所以很多时候还是需要与服务端技术(比如asp,asp.net,jsp,php之类)进行数据交互的&#xff0c;下面的代码演示了如何在flash中打开网页&#xff0c;以及用GET/POST二种方式向服务端发送数据//按下按钮&#xff0c;打开网页 btnOpen.addEvent…

【Mood 19】DailyBuild 2月

2月1号 仿美团loading时小人奔跑动画 HTML5定稿了&#xff0c;为什么原生App世界将被颠覆&#xff1f; -----HTML5一改过去卡顿不兼容的毛病&#xff0c;在硬件升级以及苹果谷歌策略变化的背景下&#xff0c;让自己的优势相对于原生开发更加明显起来&#xff1a; 对开发者的“跨…

(二)spring cloud微服务分布式云架构 - 整合企业架构的技术点

spring cloud本身提供的组件就很多&#xff0c;但我们需要按照企业的业务模式来定制企业所需要的通用架构&#xff0c;那我们现在需要考虑使用哪些技术呢&#xff1f; 下面我针对于spring cloud微服务分布式云架构做了以下技术总结&#xff0c;希望可以帮助到大家&#xff1a; …