erlang的supervisor

       supervisor是erlang的一个行为框架,他的工作重心在于管理和监督我们启动的进程,并对所有进程安排一定的策略

       把上回关于app的代码直接拿来用一下,然后我们对map_sup.erl增加一些新的东西进去,上次我们只是写了简单的启动模式,

 

-module(map_sup).

-behaviour(supervisor).
-export([start_link/0, init/1]).

start_link()->
	supervisor:start_link({local,?MODULE}, ?MODULE, []).

init([]) ->
	erlang:process_flag(priority, high),

	MapManager = {map_manager,{map_manager,start_link,[]},
		      permanent,2000,worker,[map_manager]},
	
	List = [MapManager],

	{ok,{{one_for_one,1000,2}, [MapManager]}}.

 MapManager 中的参数中指定了map_manager这个module,我们简单写一下map_manager(这个文件的作用是管理进程,包括了进程的创建和停止等对进程的详细操作)。这里我们使用otp中最常用的行gen_server,otp(Open telecom platform,请记住全称)

 

 

-module(map_manager).

-behaviour(gen_server).


-export([start_link/0]).

-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2]).

start_link()->
	gen_server:start_link({local,?MODULE},?MODULE,[],[]).%%这就是gen_server启动一个进程的方式

init([]) ->
	self() ! begin_map,
	{ok, #state{}}.

handle_info(begin_loading_map, State) ->	
	{noreply, State};

handle_info(Event, State) ->
	?ERRMSG("receive unknown message:~p~n", [Event]),
	{noreply, State}.

handle_call(Event, _From, State) ->
    {reply, Reply, State};


handle_call(_Request, _From, State) ->
    Reply = ok,
    {reply, Reply, State}.

handle_cast(_Msg, State) ->
    {noreply, State}.

terminate(_Reason, _State) ->
    ok.

code_change(_OldVsn, State, _Extra) ->
    {ok, State}.

 这里我还没想好要写些什么来测试,当我们start_link的时候我们要为我们这个进程配置一些参数,或者说,我们的进程要有一个状态才能去完成我们的逻辑,所以init方法就是初始化一个进程的方法,每次调用start_link,init都会按照需要来初始化一个进程,这里我们会吧ets放到进程中,这就是一个基础的框架,明天想想再来扩展一下.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值