码迷,mamicode.com
首页 > 其他好文 > 详细

ngxin源码学习(一)

时间:2015-04-07 17:02:25      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:

ngx_debug_init:
从nginx的main函数进入,首先看到的第一个函数函数是ngx_debug_init(),在ngx_linux_config.h中将它定义为空,所以这个函数是不会执行的,

ngx_strerror_init:
然后是ngx_strerror_init函数,这个函数的作用是初始化ngx_sys_errlist,并将错误号与错误描述符对应放入其中,

ngx_get_options:
然后是ngx_get_option函数,这个函数的作用是取得传给main函数的参数,并根据参数设置全局变量,全局变量包括ngx_show_version,ngx_show_help,ngx_show_configure,ngx_test_config,ngx_quiet_mode,ngx_prefix,ngx_conf_file,ngx_conf_params,ngx_signal,ngx_process,

设置好全局变量后,nginx会根据设置的变量,决定是否显示版本,帮助和配置

ngx_time_init函数:
然后是ngx_time_init函数,在ngx_time_init函数中,首先设置ngx中err_log_time,http_time,http_log_time,http_log_iso8601,syslog_time的长度,

    ngx_time_init -> ngx_time_update
    然后调用ngx_time_update函数,ngx会调用ngx_trylock首先判断或者ngx_time_lock是否为0(我认为0代表ngx_timelock没上锁),或者然后会调用一段汇编代码(ngx_atomic_cmp_set):
        cmpxchgq 0, ngx_time_lock
        sete %eax
    ngx_atomic_cmp_set判断ngx_time_lock是否对于0,如果为0,将其置1,也就是上锁,
    然后ngx调用ngx_gettimeofday(就是调用gettimeofday)取得当前时间,
    然后判断当前cached_time与当前时间是否相同,相同则解锁ngx_time_lock并返回,不同则在cached_time数组的下一个位置放入当前时间,
    然后调用ngx_gmtime,计算出sec,min,hour,mday,mon,year,wdays,
    然后调用ngx_localtime,函数ngx_localtime就是对库函数localtime的封装,
    然后ngx会打印err_log_time,http_log_time,http_log_iso8601,syslog_time的时间
    这个时候调用ngx_memory_barrier,这个函数调用:
    __asm_volatile(:::"memory")
    我在网上查到的是告诉编译器,cpu中的register,以及cache中的数据作废
    接下来ngx_time_update函数会重新设定err_log_time,http_time,http_log_time,http_log_iso8601,syslog_time中的值,然后解锁ngx_time_lock

然后nginx会使用memset为init_cycle分配内存空间,并将创建好的log赋值给它,然后调用ngx_create_pool分配内存池

ngxin源码学习(一)

标签:

原文地址:http://www.cnblogs.com/zhangfann/p/4398713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!