skynetの起動プロセス
3456 ワード
ルール#ルール#インデントは呼び出されたことを示す. :依存を表す. ^:弱い依存を表す; '''...'''ブロックコメントを表します. #から始まる動作行コメント; foo()はfoo関数を呼び出すことを表す.
まとめ configを読み込みます. loggerをロードします. snluaをロードします. スレッドが作成され、待機します.
# c main 。
main()
# , skynet_config。
init skynet_config : config-file
# 。 。
skynet_start() : skynet_config
# c 。
skynet_module_init() : skynet_config.module_path : config-file.cpath
# ./cservice/logger.so Context。logger 。
skynet_context_new(logger)
: skynet_config.logservice : config-file.logservice
: skynet_config.logger : config-file.logger
# "snlua bootstrap", bootstrap 。
bootstrap() : skynet_config.bootstrap : config-file.bootstrap
# ./cservice/snlua.so Context。snlua lua 。
skynet_context_new(snlua)
'''
service_snlua.c
snlua is the lua booter.
'''
# lua。
snlua_init()
# 。 。
skynet_send()
# worker , 。
skynet_context_dispatchall()
'''
dispatch all message before start. here will dispatch init message.
'''
# snlua 。
launch_cb()
init_cb()
# lua。
init lua
# codecache ; c , 。
create module "skynet.codecache"
# 。
set lua paths
LUA_PATH : environment.lua_path ^: config-file.lua_path
LUA_CPATH : environment.lua_cpath ^: config-file.lua_cpath
LUA_SERVICE : environment.luaservice ^: config-file.luaservice
LUA_PRELOAD : environment.preload ^: config-file.preload
# ./lualib/loader.lua 。
load loader : ./lualib/loader.lua
'''
# LUA_PRELOAD , 。
1. load all preload lua modules.
2. load specific lua module.
'''
# loader ./service/bootstrap.lua。
loader("bootstrap") : ./service/bootstrap.lua
# bootstrap 。
# 。
start() : skynet_config.thread
create monitor thread
'''
loop message monitor.
'''
create timer thread
'''
timer event -> skynet message
'''
create network thread
'''
network message -> skynet message
'''
create worker thread
'''
skynet message dispatcher
'''
join all threads
まとめ