Nginx核心循环
工作进程主循环函数ngx_worker_process_cycle,作用
1:创建线程(非线程模型,posted事件在主循环中串行处理;线程模型,线程等待posted事件的触发)
2:循环ngx_process_events_and_timers--epoll事件、定时器、posted请求都在进程的主循环中进行
ngx_process_events_and_timers中
1:ngx_process_events
epoll模型的事件处理
2:ngx_event_process_posted
处理连接的请求
对应全局变量ngx_posted_accept_events
3:ngx_event_expire_timers
判断是否有超时事件,有的话一次处理全部超时事件并删除已处理定时器
对应全局变量ngx_event_timer_rbtree
4:ngx_event_process_posted(非线程模型)或者ngx_event_thread_process_posted(线程模型)
ngx_event_process_posted直接处理posted事件
ngx_event_thread_process_posted利用pthread_cond_signal(&cv->cond);进行线程同步,由线程处理对应的事件
对应全局变量ngx_posted_events
ngx_process_events实际为ngx_epoll_process_events
1:epoll_wait得到事件的个数,然后逐一处理;主要为write和read事件
epoll事件、定时器、posted事件(线程模型下由线程处理)三者的具体处理,以后再分析
线程模式下,定时器和posted事件都由线程处理,不在主进程中串行处理。