epoll

select,poll,epoll都是多路复用的一种机制,多路复用就是通过一种 机制监听多个文件描述符,当文件描述符就绪之后,就通知相关的程序就行读写的操作

select,poll实际上是让内核去不断的轮询,看看时间是否发生了,

文件描述符的拷贝,只要一次从用户态拷贝到内核态
epoll是通过回调函数的机制,当时文件描述符就绪之后,就会将唤醒等待队列上面的等待者,等待着调用回调函数,就就绪好的文件描述符写到了就绪队列中

使用select的时候,等待事件就绪,当有事件就绪之后,select被唤醒了,但是此时select不知道哪个文件描述符就绪了,所以此时select需要遍历所有的文件描述符

epoll中,由底层唤醒等到者,这里暂时理解成是epoll函数,同时将唤醒者的信息记录在红黑树中了 这句话是什么意思呢,不懂呀,不知道对不对呢

select和pollepoll的区别

select函数,它是一个轮询式的函数,轮询式的询问一些文件描述符,这里还可以设置一个超时时间,如果过了这个时间,我们就可以接着往下去执行其他的语句

select系统调⽤是⽤来让我们的程序监视

缺点:
可监控的⽂件描述符个数取决与sizeof(fd_set)的值,就是这里可以监控的文件描述符是有限的
就是我们每次调用完select之后,都需要把参数重新的设置一遍,
当select每次返回一次,没返回的时候,我们就需要遍历一下重新的设定,这样的话,当用户量多的时候,我们的遍历就会变得很多了
内核和用户之间需要来回的不断拷贝数据,这样的话,我们的数据拷贝就会非常的多了
输入输出型参数,这里参数需要频繁的设定

poll理论上说监控描述符是没有上限的,这个函数本身没有上限,但是也有硬件有关心的
但是poll也需要维护一个数组,关心的事件就在这个数组里面维护着,我们需要不断的遍历这个数组,然后查看我们的事情响应,当我们的用户量很大的时候,反而会使我们的效率变低

epoll底层维护的是一个红黑树,当我们的事件响应的时候,就会把我们的就绪事件写到一个队列中,这个时候我们的用户只需要查看我们的队列中是不是有数据就可以了,

高效性体现在,我们底层维护一个红黑树,增删查改的事件效率高
用户不需要一次次的轮询了,而是由内核直接告诉我们呢的用户
用户直接查看我们的队列就可以了,提高了用户的效率
不需要数据在用户和内核之间的来回拷贝

epoll的模式LT模式,就是我们的如果有事件发生了,就一直的告诉用户,ET模式就是,只有当事件发生变化的时候,才会通知用户

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值