分类: 架构设计与优化
2014-11-03 22:49:52
Nginx的main函数在文件 ./src/core/nginx.c中。 其处理流程为 :
main() --->
---> ngx_debug_init() : debug init, 在linux环境下未定义
---> ngx_strerror_init() : 出错代码初始化,将错误代码保存在预分配的内存中
---> ngx_get_options() : 处理nginx启动时的附加参数
---> ngx_time_init() : 初始化时间,注意不是timer,是time
---> ngx_regex_init() : 初始化正则表达式引擎
---> 取得pid
---> ngx_log_init() : 初始化log系统, open log文件
---> ngx_ssl_init() : 初始化SSL
---> 初始化nginx的主要控制数据结构 init_cycle
---> 关联log
---> ngx_create_pool() : 创建内存pool
---> ngx_save_argv(0 : 保存启动参数
---> ngx_process_options() : 处理nginx启动参数,将其与cycles关联
---> ngx_os_init() : 平台相关的系统级初始化
---> ngx_crc32_table_init() : CRC32校验和初始化
---> ngx_add_inherited_sockets() : 取得已有的继承的sockets, 发生在reload 配置文件时候
---> ngx_init_cycle() : 初始化cycle的其他部分
---> ngx_timezone_update() : 初始化timezone
---> ngx_create_pool() : 创建新的pool与cycle数据结构,拷贝数据,从旧的cycle到新的cycle机构
---> ngx_list_init() : 初始化用到的列表
---> ngx_queue_init() : 初始化用到的队列
---> handle the conf file : 处理配置文件
---> ngx_test_lockfile() :
---> ngx_create_paths() :
---> ngx_log_open_default() : 打开新的log文件
---> 创建并初始化共享内存
---> 处理sockets
---> 处理old cycles 遗留的垃圾
---> 信号处理初始化
---> ngx_daemon() : 创建daemon
---> ngx_create_pidfile() : 创建pid文件
---> ngx_single_process_cycle() OR ngx_master_process_cycle() : 进入主处理流程
---> ngx_single_process_cycle() : SINGLE 模式
---> ngx_process_events_and_timers() : 处理全部的事件,timer也是事件的一种
---> ngx_process_psoted() : 处理网络数据到达事件
---> ngx_master_process_cycle() : MASTER 模式
---> ngx_start_worker_processes() : 启动worker进程,可能有多个worker进程,默认为一个
----> ngx_worker_process_cycle() : worker process 处理程序
---> ngx_create_thread() : 创建worker线程
---> ngx_worker_thread_cycle() : worker线程处理函数
---> ngx_event_thread_process_posted() : 调用event->handler, 处理POSTED 事件
---> 进入 worker的 forever 循环,等待处理事件
---> ngx_start_cache_manager() : 启动cache manager 进程
---> forever 循环, 进入master的 forever 循环,等待信号输入