启动入口
skynet启动的入口在文件skynet_main文件中的main函数,其实就是C程序的入口函数,然后显而易见的启动的传参argv,从中取出配置文件名赋值config_file 。如果不带参数启动,程序直接就退出了。
const char * config_file = NULL ;
if (argc > 1) {
config_file = argv[1];
} else {
fprintf(stderr, "Need a config file. Please read skynet wiki : https://github.com/cloudwu/skynet/wiki/Config\n"
"usage: skynet configfilename\n");
return 1;
}
初始化环境变量
在skynet_env文件中可以看到保存环境变量的是一个全局参数E,类型是skynet_env其中
-
lock是锁(skynet是多线程程序,全局变量需要加锁),其中有两种锁1)互斥锁 2)自旋锁。具体使用哪种锁根据不同的系统而不同,优先使用互斥锁,代码通过宏来分割。
-
L是lua的状态机类型。
所以其初始化就是分配E的内存,然后初始化lock,通过luaL_newstate创建lua的状态机。skynet_env_init() { E = skynet_malloc(sizeof(*E)); SPIN_INIT