skynetの起動プロセス

3456 ワード

ルール#ルール#
  • インデントは呼び出されたことを示す.
  • :依存を表す.
  • ^:弱い依存を表す;
  • '''...'''ブロックコメントを表します.
  • #から始まる動作行コメント;
  • foo()はfoo関数を呼び出すことを表す.
  • #  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
    

    まとめ
  • configを読み込みます.
  • loggerをロードします.
  • snluaをロードします.
  • スレッドが作成され、待機します.