从Nginx角度看服务器多进程模型设计(2)

在worker进程的进程信息数组中,把当前worker进程信息结构(即ngx_process_slot对应的位置)中的channel[0]关掉,
同时会把其他进程的channel[1]关掉,而只把他们的channel[0]留着,如下代码所示。那么这样做的意图是什么?

ngx_worker_process_init(ngx_cycle_t *cycle, ngx_uint_t priority) {       ...          for (n = 0; n < ngx_last_process; n++) {              if (ngx_processes[n].pid == -1) {               continue;           }              if (n == ngx_process_slot) {               continue;           }              if (ngx_processes[n].channel[1] == -1) {               continue;           }              if (close(ngx_processes[n].channel[1]) == -1) {                ...           }       }          if (close(ngx_processes[ngx_process_slot].channel[0]) == -1) {            ...       }      }  

在ngx_worker_process_init的最后,调用了函数ngx_add_channel_event:

ngx_add_channel_event(cycle, ngx_channel, NGX_READ_EVENT, ngx_channel_handler)

主要的目的是向epoll中注册读事件。读数据的fd为变量ngx_channel,处理函数是ngx_channel_handler,那么ngx_channel是什么, 这个处理函数又做了些什么呢?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/07638404d74f7ff015ac05a523d87ca0.html