skynet源码解析--启动篇之配置

本文从启动入口开始解析Skynet源码,详细介绍了如何从`skynet_main`中的`main`函数获取配置文件,以及初始化环境变量的过程。在`skynet_env`文件中,对全局环境变量E进行分配和初始化,并使用lua状态机加载配置。接着,通过`load_config`将配置加载到临时lua虚拟机,然后保存到全局参数。配置必选项如无设定,则采用默认值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

启动入口

    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其中

  1. lock是锁(skynet是多线程程序,全局变量需要加锁),其中有两种锁1)互斥锁 2)自旋锁。具体使用哪种锁根据不同的系统而不同,优先使用互斥锁,代码通过宏来分割。

  2. L是lua的状态机类型。
        所以其初始化就是分配E的内存,然后初始化lock,通过luaL_newstate创建lua的状态机。

    skynet_env_init() {
         
    	E = skynet_malloc(sizeof(*E));
    	SPIN_INIT(E)
    	E->L = luaL_newstate
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值