什么是gen:开始意义?

时间:2012-02-24 03:25:12

标签: erlang

在项目gproc的文件gen_leader.erl中,创建了自定义行为。但在下面的陈述中,什么是模块“gen”?我在“erlang文档工具http://www.erlang.org/erldoc”中找不到这个模块?你能给我一些解释吗?

behaviour_info(callbacks) ->
    [{init,1},
     {elected,2},
     {surrendered,3},
     {handle_leader_call,4},
     {handle_leader_cast,3},
     {handle_local_only, 4},
     {from_leader,3},
     {handle_call,3},
     {handle_cast,2},
     {handle_DOWN,3},
     {handle_info,2},
     {terminate,2},
     {code_change,4}];
behaviour_info(_Other) ->
    undefined.

start_link(Name, [_|_] = CandidateNodes, Workers, 
       Mod, Arg, Options) when is_atom(Name) ->
    gen:start(?MODULE, link, {local,Name}, Mod, %<<++++++ What's the meaning?
          {CandidateNodes, Workers, Arg}, Options).

1 个答案:

答案 0 :(得分:10)

看起来gen:start()指的是gen.erl。根据文件中的文档,gen.erl实现了gen_server,gen_fsm和其他OTP行为的通用部分。在这种情况下,看起来gen_start处理产生新进程。它会检查是否已使用给定名称生成进程。如果有,则返回错误。如果没有,则通过调用模块的startstart_link函数来生成新进程。

换句话说,当您致电gen_server:startgen_fsm:start时,它会调用gen:start(执行基本的健全性检查)和gen:start,然后调用模块的start或{ {1}}。当您创建自定义OTP行为时,您必须直接调用start_link,这样您就不需要复制gen:start中的错误检查代码。