IO多路复用模型——epoll

1、IO多路复用模型是阻塞IO,阻塞部分是select函数而不是socket,IO多路复用模型是可以监听多个socket连接, IO多路复用模型目的不是单个连接有多快,而是需要连接大量的请求。

2、epoll的ET 需要保证socket是non block socket

 

 

首先介绍一个select 和 poll 模型吧 

select : 所有的socket连接都注册到一个select,然后启动一个线程去遍历这个select,当发现有socket进入就绪状态,然后就会去执行这个socket里面的读写,处理完就返回,然后接着遍历。(轮训模式)

缺点:

1、文件描述符使用数组存,会出现数量的限制,1024个。

2、每次调用select都要去初始化一次描述符。重复初始化。将fd从用户态拷贝到内核态,每次调用select后,都需要将fd从内核态拷贝到用户态;

3、轮训排查方式太慢,效率低

poll:和select差不多 都是轮训的方式,但是有一点不一样,fd的存储使用链表,fd个数不受限制了,然后每次初始化fd之后就不用再次初始化,

缺点:轮训方式太慢

epoll: 采用事件触发模式,epoll采用只返回状态发生变化的文件描述符,便解决了轮寻的瓶颈。使用红黑树存储fd,有两种模式。

LT 水平触发模式 

EL 边缘触发模式 

 

 

你可能感兴趣的:(IO多路复用模型——epoll)