标签:ar 使用 sp for strong on art 代码 bs
一、概念:
Supervisor: 监控树
二、作用:
用于监控其它的进程是否正常运行
三、定义监控树的行为和被监控的进程:
1、整个监控树的重启策略:(如果一个进程停止了,如何处理)
1、one_for_one : 如果一个子进程停止了,则中重启访进程
2、one_for_all : 如果一个子进程停止,所有其他子进程也停止,然后所有进程重启
3、rest_for_one : 如果一个子进程停止,则启动顺序中在它之后的所有其他子进程也停止, 然后
重启停止进程
4、simple_one_for_one:
1、一个简化的one_for_one
2、运行相同的代码,即只有一类子进程
3、监控树启动后,不启动子进程
4、动态添加
2、重启频率:在一定的时间内(MaxT)(秒),重启的次数超过了最大的重启次数(MaxR),监控树就会关闭所有的子进程和其本身
3、子进程的定义:
Id : 一个标记,自定义,来区分不同的进程
StartFunc: {Mod, Fun, Args}
Restart :
1、permanent:子进程总是重启
2、transient:子进程只会在非正常结束时,才会重启
3、temporary:绝对不重启,即除normal, shutdown, {shutdown,Term}之外的原因
Shutdonw:
1、brutal_kill: 无条件终止,使用exit(Child, kill)
2、一个时间(非负):先使用exit(Child, shutdown),等待一段时间,如果没有返回的shutdown,就
使用exit(Child, kill),强制杀死进程
3、infinity: 一直等待,当子进程也是一个监控树的时候,强烈推荐这个,以便子树有足够的时间结束
Type :
1、supervisor :表明此进程也是一个监控树
2、worker : 表示此进程是一个工作进程,即用来执行具体操作的进程
Modules :
1、假如子进程是supervisor、gen_server 或 gen_fsm,那么Module,就是一个列表,里面仅仅包含一个模块的名称,eg: [ModeName];
2、假如子进程是gen_event,那么Modules应该是dynamic
四、一个supervisor模版的构成:
1、start_link函数:用于创建监控树本身,这个函数中,仅仅调用 supervisor:start_link:
1、start_link的参数(三个)
1、给监控树起一个名字,分为三种,local,global,via
1、{local, SupName}: 注册一个本地的名字
2、{global, SupName}: 注册一个全局的名字,跨节点
3、{via, Module, Name}: 没有成功?
2、监控树所在的模块
3、需要传给Module:init的函数,如果是多个参数的话,就用列表
2、返回值:
1、{ok, pid()} : 成功
2、 ignore : 如果Module:init函数返回ignore,就返回ignore
3、 {error, Why}: 失败
3、start_link,会调用Module:init的函数去找到重启策略与所有的子进程,start_link会在 Modult:init初始化结束后,并且所有子进程都已经启动后,才会返回
2、init函数: 返回整个对监控权的定义和被监控的子进程
init函数,仅仅返回一个类似于{ok, {{重启策略,MaxR, MaxT}, [AllChildProcess]}}的结构。
1、{重启策略,MaxR, MaxT}, 重启策略和最大重启频率
2、 [AllChildProcess], 定义被监控的子进程
标签:ar 使用 sp for strong on art 代码 bs
原文地址:http://my.oschina.net/wangcan/blog/343712