标签:复用 方式 升级 连接 限制 程序 bsd 活跃 center
制作人:全心全意
Select:Linux实现对应,I/O复用模型,BSD4.2最早实现
Poll:Linux实现,对应I/O复用模型,System V unix最早实现
Epoll:Linux实现,对应I/O复用模型,具有信号驱动I/O模型的某些特性
select | poll | epoll | |
操作方式 | 遍历 | 遍历 | 回调 |
底层实现 | 数组 | 链表 | 哈希表 |
IO效率 | 每次调用进行线性遍历,时间复杂度O(n) | 每次调用进行线性遍历,时间复杂度O(n) | 事件通知方式,每当fd就绪,系统注册的回调函数就会被调用,时间复杂度O(1) |
最大连接数 | 1024(x86)或2048(x64) | 无上限 | 无上限 |
fd拷贝 | 每次调用select,都需要将fd集合从用户态拷贝到内核 | 每次调用poll,都需要将fd集合从用户态拷贝到内核 | 调用时拷贝进内核并保存,之后每次epoll_wait不拷贝 |
说明:
在Linux2.6内核中提出的select和poll的增强版本
支持水平触发LT和边缘触发ET,最大的特点在于边缘触发,它只告诉进程哪些fd刚刚变为就绪态,并且只会通知一次
使用”事件“的就绪通知方式,通过epoll_ctl注册fd,一旦该fd就绪,内核就会采用类似callback的回调机制来激活该fd,epoll_wait便可以收到通知
优点:
没有最大并发连接的限制:能打开的FD的上限远大于1024(1G的内存能监听约10万个端口)
效率提升:非轮询方式,不会随着FD数目的增加而效率降低;只有活跃可用的FD才会调用callback函数,即epoll最大的优点就在于它只管理”活跃“的连接,而跟连接总数无关
内存拷贝:利用mmap加速与内核空间的消息传递;即epoll使用mmap减少复制开销
master/worker结构
一个master进程:负责加载和分析配置文件、管理worker进程、平滑升级
一个或多个worker进程:处理并响应用户请求
缓存相关的进程:
cache loader:装载缓存对象
cache manager:管理缓存对象
nginx高度模块化,但其模块早期不支持DSO机制;1.9.11版本支持动态装载和卸载
模块的分类:
核心模块:core module
标准模块:
HTTP模块:ngx_http_*
HTTP Core modules 默认功能
HTTP Optional modules 需编译时指定
Mail模块:ngx_mail_*
Stream模块:ngx_stream_*
第三方模块
标签:复用 方式 升级 连接 限制 程序 bsd 活跃 center
原文地址:https://www.cnblogs.com/zhangquan-yw/p/10265633.html