今天遇到了比较有趣的,我想大家一般创建监控都是使用supervisor:start_link/3但是这次我遇到了这样的方法 gen_server:start_link(Name,supervisor,{Name,Mod,Arg},[])
一开始我非常不解,所以研究了下。以下是我跟据书本和自身的理解。
start_link函数是相当于spawn_link,都是创建一个进程,区别在于前者能在创建成功后
才返回pid,在多个进程创建时起保护作用!然而当调用上面gen_server:start_link,创建出的
会调用到superviors模块中的init并将{Name,Mod,Arg}作为参数转递,这种行为就相当于supervior:start/3。
不过上网查了一下,好像erlang中没有supervisor:init,我估大概是自己修改的。我主要想表达的是
这样写法需要很深入理解otp的行为深层代码才能如此奔放大胆跳过常规
|