Erlang gen_server:start_link/3 和gen_server:start_link/4 的区别以及各参数的含义

  两个方法都可以用来启动一个gen_server服务器进程,具体的参数如下:

              gen_server:start_link(Module,Args,Option);

              gen_server:start_link(ServerName,Module,Args,Option);

 

              第二个方法只比第一个多了个ServerName,在gen_server的源码中区别如下:

  1. start_link(Mod, Args, Options) ->  
  2.     gen:start(?MODULE, link, Mod, Args, Options).  
  3.   
  4. start_link(Name, Mod, Args, Options) ->  
  5.     gen:start(?MODULE, link, Name, Mod, Args, Options).

           再具体看gen的源码:

  1. -spec start(module(), linkage(), emgr_name(), module(), term(), options()) ->  
  2.     start_ret().  
  3.   
  4. start(GenMod, LinkP, Name, Mod, Args, Options) ->  
  5.     case where(Nameof  
  6.     undefined ->  
  7.         do_spawn(GenMod, LinkP, Name, Mod, Args, Options);  
  8.     Pid ->  
  9.         {error, {already_started, Pid}}  
  10.     end.  
  11.   
  12. -spec start(module(), linkage(), module(), term(), options()) -> start_ret().  
  13.   
  14. start(GenMod, LinkP, Mod, Args, Options) ->  
  15.     do_spawn(GenMod, LinkP, Mod, Args, Options). 

         可以看出如果有ServerName参数就会先查找一遍是否有同名的进程存在,有就会产生{error,{already_started,Pid}} 的提示。

         所在在开发并发的gen_server程序的时候要注意调用哪个方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值