Archive for 十一月 2011

[erlang库源码阅读]gen_server.erl

继续接着上一篇文章分析gen.erl来分析下gen_server.

在gen.erl中,start操作最终会走到GenMod:init_it函数中,这里的GenMod就是gen_server/fsm/event三个模块,所以先来看看gen_server中的init_it函数.

%%% ---------------------------------------------------
%%% Initiate the new process.
%%% Register the name using the Rfunc function
%%% Calls the Mod:init/Args function.
%%% Finally an acknowledge is sent to Parent and the main
%%% loop is entered.
%%%

[erlang库源码阅读]gen.erl

gen系列代码,gen_server,gen_event,gen_fsm的代码都在erlang代码的lib/stdlib中,它们都是以gen.erl为基础的.gen.erl中定义了一些这几个behavior公有的代码,所以首先来看看gen.erl做了什么.

gen.erl中主要是定义了以下几个操作:start(启动一个gen系列的服务器),call(向gen系列服务器send请求并且等待回复).

1) start

start(GenMod, LinkP, Mod, Args, Options) ->
    do_spawn(GenMod, LinkP, Mod, Args, Options).
do_spawn(GenMod, _, Name, Mod, Args, Options) ->
    Time = timeout(Options),