什么是gen:开始意义?

Che*_* Yu 4 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).
Run Code Online (Sandbox Code Playgroud)

qua*_*cle 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_link.当您创建自定义OTP行为时,您必须gen:start直接调用,以便您不需要复制错误检查代码gen.erl.