select 和 epoll 的区别总结

在Linux中,select 和epoll函数,都是为了监控大量的描述符,是一种I/O多路复用技术。下面总结它们的区别:

select 与 epoll区别

1、打开的最大描述符数量限制
   select 文件描述符使用的是linux ext3,因此打开数量受限制,一般默认为1024
   epoll自己实现了一个虚拟文件系统,因此打开的描述符数就和机器内存有关,这个数值会很大

2、描述符传递方式
  a、 select 每次调用时,都要传入描述符集,都要从用户空间拷贝内核空间,不仅如此,还会把传入的fd_set描述符                    集清空,还必须对重新把每个描述符加入到fd_set中。
         epoll 只需第一次传入,内核会保存描述符集,是保存在内核空间和用户空间共同mmap的一块空间,这样省去                    由用户空间拷贝到内核空间的过程,并且epoll_ctl 可以对描述符增、删、改。
  b、 select 返回的只是就绪描述符的个数,必须遍历描述符集找到就绪的描述符,显然描述符过多,成为效率瓶颈。
         epoll  把就绪描述符保存在传出参数 epoll_event数组中
   
3、内部轮询机制
   select 每次调用都要遍历所有的描述符来发现描述符是否就绪,因此随着描述符数量增加,效率直线下降
   epoll  只是判断链表rdlist是否为空即可,因为每次添加描述符时,会注册一个回调函数,使该事件与相应的网卡设               备驱动程序建立回调关系,当描述符就绪时,就会调用回调函数,把这个描述符添加到rdlist,rdlist 就是一个               就绪描述符的链表。 

4、事件触发模式

   select 只支持水平触发

   epoll   支持两种触发模式ET(边角触发)和LT(水平触发),这其实和电路中高电平触发和边沿触发的模式是一样              的,ET模式是指描述符由不可读或者不可写变为可读或者可写时,epoll才通知有事件发生LT模式则是描述符             只要可读或者可写,epoll就通知有事件发生。

由于笔者的水平有限,出错在所难免,恳请读者拍砖指正,谢谢阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值