nginx epoll IO事件管理
2018-03-22 09:08
656 查看
1 nginx是以连接池的方式管理接入的tcp连接
既然是连接池,自然就会有初始化(申请连接池)、获取一个空闲的连接、释放连接、连接注册到epoll事件的过程
一 连接池初始化
连接池是由nginx核心模块管理的。(其实就是一个malloc出来的连接对象的数组)
参阅:ngx_connection.c ngx_event.c文件
FILE:ngx_event.c LINE:684 cycle->connections =
ngx_alloc(sizeof(ngx_connection_t) * cycle->connection_n, cycle->log);
if (cycle->connections == NULL) {
return NGX_ERROR;
}
申请connection_n, 个连接对象内存空间。connection_n 是核心模块配置,默认是512个。
二 申请连接对象
ngx_cycle_t 中有一个free_connection_c指针,每次都指向一个空闲的连接对象。
每一个连接对象的data域保存了下一个空闲连接的指针。
FILE:ngx_connection.c LINE:1045 c = ngx_cycle->free_connections
LINE:1060 ngx_cycle->free_connections = c->data;
三 释放连接对象
与二是逆过程
将空闲对象指向当前是否的连接对象,并且调整下一个空闲对象的未知
FILE:
LINE:1098
c->data = ngx_cycle->free_connections;
ngx_cycle->free_connections = c;
ngx_cycle->free_connection_n++;
if (ngx_cycle->files && ngx_cycle->files[c->fd] == c) {
ngx_cycle->files[c->fd] = NULL;
}
四 事件的注册与删除
创建一个新链接的过程:
1 创建socket 2 申请连接对象 3 将连接注册到epoll监听列表
FILE:ngx_event_connect.c
LINE:15 ngx_event_connect_peer(主动连接远端)
LINE:119 ngx_add_conn(c);
ngx_add_conn ==>ngx_epoll_add_connection
五 epoll事件管理
ngx_epoll_del_connection() 删除监听 epoll_ctl EPOLL_CTL_ADD
ngx_epoll_add_connection()增加监听 epoll_ctl EPOLL_CTL_DEL
ngx_epoll_process_events()时间处理 epoll_wait
既然是连接池,自然就会有初始化(申请连接池)、获取一个空闲的连接、释放连接、连接注册到epoll事件的过程
一 连接池初始化
连接池是由nginx核心模块管理的。(其实就是一个malloc出来的连接对象的数组)
参阅:ngx_connection.c ngx_event.c文件
FILE:ngx_event.c LINE:684 cycle->connections =
ngx_alloc(sizeof(ngx_connection_t) * cycle->connection_n, cycle->log);
if (cycle->connections == NULL) {
return NGX_ERROR;
}
申请connection_n, 个连接对象内存空间。connection_n 是核心模块配置,默认是512个。
二 申请连接对象
ngx_cycle_t 中有一个free_connection_c指针,每次都指向一个空闲的连接对象。
每一个连接对象的data域保存了下一个空闲连接的指针。
FILE:ngx_connection.c LINE:1045 c = ngx_cycle->free_connections
LINE:1060 ngx_cycle->free_connections = c->data;
三 释放连接对象
与二是逆过程
将空闲对象指向当前是否的连接对象,并且调整下一个空闲对象的未知
FILE:
LINE:1098
c->data = ngx_cycle->free_connections;
ngx_cycle->free_connections = c;
ngx_cycle->free_connection_n++;
if (ngx_cycle->files && ngx_cycle->files[c->fd] == c) {
ngx_cycle->files[c->fd] = NULL;
}
四 事件的注册与删除
创建一个新链接的过程:
1 创建socket 2 申请连接对象 3 将连接注册到epoll监听列表
FILE:ngx_event_connect.c
LINE:15 ngx_event_connect_peer(主动连接远端)
LINE:119 ngx_add_conn(c);
ngx_add_conn ==>ngx_epoll_add_connection
五 epoll事件管理
ngx_epoll_del_connection() 删除监听 epoll_ctl EPOLL_CTL_ADD
ngx_epoll_add_connection()增加监听 epoll_ctl EPOLL_CTL_DEL
ngx_epoll_process_events()时间处理 epoll_wait
相关文章推荐
- Nginx事件管理机制-epoll
- nginx采用epoll的事件模型,为何效率高
- Nginx学习之十-超时管理(定时器事件)
- 【Nginx】epoll事件驱动模块
- Nginx 的 epoll 事件驱动模块
- Nginx学习之十-超时管理(定时器事件)
- nginx事件模块之ngx_epoll_module源码分析
- Nginx学习之十-超时管理(定时器事件)
- nginx中的事件响应机制(以epoll为例)
- Nginx学习之十-超时管理(定时器事件)
- nginx采用epoll的事件模型,为何效率高
- Nginx事件处理(epoll)
- Nginx网络epoll多进程系列:Nginx源码研究二:NGINX的事件处理概论
- Nginx学习之十-超时管理(定时器事件)
- nginx优化-nginx事件处理模型优化use epoll;
- Nginx基础. epoll事件驱动模块
- nginx的epoll事件
- 【Nginx】epoll事件驱动模块
- Nginx源码分析 - Event事件篇 - epoll事件模块
- 文章6:Nginx中的Epoll事件处理机制