I/O 模型
同步/异步:关注的是消息通信机制
同步:synchronous 调用者等待被调用者返回信息,再继续执行后续操作
异步:asynchronous 被调用者通过状态、通知或回调机制主动通知调用者被调用者的状态
阻塞/非阻塞模型
阻塞:blocking IO操作需要彻底完成后才回到用户空间,调用结果返回前,调用者被挂起
非阻塞:noblocking IO操作被调用后立即给用户返回一个状态值,无需等待IO彻底完成,最终的调用结果返回前,调用者不挂起
(非阻塞型并不直接使用,程序虽然没有挂起,但是会不断发起IO请求等待答复,消耗大量CPU资源。一般在其他模型中使用)
IO多路复用型
有等待机制作(select)为中间调和,负责接收请求,并不直接请求内核。本质上也是阻塞特征,阻塞点在等待机制select
使用场景:
客户端处理多个描述符是(一般为交互输入和网络套接口)
一个TCP服务器既要已连接套接字又要监听套接字
一个服务器要处理TCP、UDP
一个服务器要处理多个服务或协议
具体实现:
select:linux实现,对应IO复用模型
poll:linux实现,对应IO复用模型
epoll:linux实现,对应IO复用模型,具有信号驱动IO某些特征
kqueue: FreeBSD实现,IO复用,有信号驱动IO特性
/dev/poll: SUN的Solaris实现
Iocp:Windows实现,对应异步模型
中间等待机制 select poll epoll的异同
poll epoll select
操作方式 遍历(逐一查寻) 回调 遍历
底层实现 链表 哈希表 数组
IO效率 调用使用先性遍历 事件通知,fd就绪时,系统注册 同poll
时间复杂度O(n) 回调函数,被调用将fd放入rdllist
最大连接数 无上限 无上限 1024(x86),2048(x64)
fd拷贝 用户态拷贝到内核态 调用epoll_ctl时拷贝,之后 同poll
每次epoll_wait不拷贝
select:可跨越平台,通过设置或检查存放fd标志位的数据结构进行下一步的处理
缺点:单个进程可监视的fd数量被限制 cat /proc/sys/fs/file-max
对socket线性扫描即轮询方法,效率低
fd拷贝凡是会使用用户空间和内核空间,传递fd结构时复制开销大
poll:与select无特别差异,水平触发(LT,报告fd后,没有处理,下次poll会再次报告,select相同)
epoll:边缘触发(ET,通知一次)和LT
nginx的特性
模块化、高可靠性、支持热部署(不停机升级版本)、第内存消耗
基本功能
静态资源的web服务器
http反向代理服务器
pop3/imap4 反向代理服务器
FastCGI(LNMP)、uWSGI、python等协议客户端
程序架构
master/worker
一个master进程:负责加载和分析配置文件,管理worker进程,平滑升级
一个或多个worker进程:处理并响应用户请求
缓存相关的进程
cache loader 载入缓存对象
cache manager 管理缓存对象
模块分类
核心模块:core module
标准模块:HTTP模块 ngx_http_* 、HTTP Core modules 默认功能、HTTP Optional modules 编译指定
Mail 模块 ngx_mail_*
Stream 模块 ngx_stream_* (TCP代理)
第三方模块
,
来源:CSDN
作者:Qin-Jin
链接:https://blog.csdn.net/qq_43257377/article/details/104222467