select poll epoll的区别

使用I/O复用的场景
(1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。
  (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。
  (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。
  (4)如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用。
(5)如果一个服务器要处理多个服务或多个协议,一般要使用I/O复用。

select

在这里插入图片描述

nfds 表示被监听文件描述符的总数
readfds writefds exceptfds 分别代表可读 可写 异常等事件对应的文件描述符集
fd_set结构体中有个FD_SET的宏代表能容纳文件描述符的数量,限制了select能同时处理的文件描述符总量,总量为1024。
timeout 代表设定select 函数的超时时间 如果传0,select函数立即返回, 如果传入NULL,那么函数将一直阻塞,直到某个文件描述符就绪。

每次调用select前都要重新在read_fds和exception_fds中设置文件描述符connfd,因为在事件发生之后,文件描述符集合将被内核修改。

select 的缺点:
(1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
(2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
(3)select支持的文件描述符数量太小了,默认是1024
(4)select的触发方式是水平触发,应用程序如果没有完成对一个已经就绪的文件描述符进行IO操作,那么之后每次select调用还是会将这些文件描述符通知进程。
**

poll

**
函数原型
在这里插入图片描述

poll 和select 类似,都是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪的描述符。
fds 是一个pollfd类型的数组,他指我们所有感兴趣的文件描述符发生在可读可写和异常等事件。
nfds 指被监听事件集合的大小。
timeout 超时时间

相比select模型,poll使用链表保存文件描述符,因此没有了监视文件数量的限制,但其他三个缺点依然存在。

epoll

与select poll 有很大的区别 ,epoll使用一组函数来完成任务,而不是类似于select poll 单个函数。其次epoll把用户关心的文件描述符事件全部放入内核中的一个事件表中,无需再像select poll 一样,每次调用都要重复的传入文件描述集或事件集中。但epoll需要额外使用一个文件描述符,以此来标识内核中的这个事件表。
epoll_create 创建一个文件描述符
epoll_ctl 用来操纵 epoll的内核事件表
在这里插入图片描述
fd:要操纵的文件描述符
op:指定参数类型
EPOLL_CTL_ADD 往事件表中注册fd上事件
EPOLL_CTL_MOD修改fd上的事件
EPOLL_CTL_DEL 删除fd上的事件
event 指定事件 (与poll中支持的事件相同)

epoll_wait 他在一段超时时间内等待一组文件描述符上的事件
成功返回就绪的文件描述符个数,失败返回-1。
在这里插入图片描述

epoll_wait 如果监测到事件,就将所有就绪事件从内核事件表中复制到第二个参数events中,用于输出epoll_wait 监测到的就绪事件,而不像select poll 那样既要传入用户注册的事件,又用于输出内核监测到的就绪事件。

ET和LT的区别
epoll对文件描述符的操作有两种模式:LT(电平触发)和ET(边缘触发)。默认情况下为LT模式,这种模式相当于高效的poll。

对于LT模式,当epoll_wiat检测到其事件上发生并将此事件通知应用程序后,可以不用立即处理该事件,当应用程序下一次调用epoll_wait, epoll_wait还会再次向应用程序通知此事件,直到事件被处理。ET模式下,当epoll_wait监测到其有事件发生时并将此事件通知给应用程序,应用程序程序必须处理,因为后续的epoll_wait调用将不再给应用程序通知这个事件。ET模式减少了同一epoll事件被重复触发的次数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值