select,poll,epoll的区别 各自支持的最大fd数上限以及原因

本文介绍了select、poll和epoll的区别,包括它们各自支持的最大文件描述符(fd)数上限。select默认上限为1024,可通过修改FD_SETSIZE并重新编译增加;poll和epoll无明确上限。在性能方面,epoll优于select和poll,因为它使用边缘触发和水平触发模式,并且只返回已准备好的事件,减少了扫描的时间开销。
摘要由CSDN通过智能技术生成

各自支持的最大fd数上限以及原因

select支持的fd数是固定的,默认一般为1024,用一个常数FD_SETSIZE定义,如果要monitor更多的fd,需要修改这个常数,并且重新编译(?),一般如果要monitor超过1024的fd,推荐使用poll/epoll

poll和epoll,因为他们monitor的fd list是通过数组或者说链表来保存,所以没有数量限制

区别

select

select是三者中最早被使用的多路复用机制,因此可移植性最好

通过给定三个fd set(bit mask),分别对应关注的是否可读,可写,是否出现异常三种类别,在调用select的时候,这三个集合被传给内核,内核逐一检测这些fd是否ready,然后把三个集合中ready的fd对应的bit置为1,返回

然后用户再逐一检测set中的fd是否处于ready,如果是,就对对应的fd执行相应的操作

注意到,在上面的描述中,用户始终需要扫描整个集合,也就是说扫描的个数和io事件的个数无关,而是始终是FD_SETSIZE,为了提高效率,我们可以使用一个maxfd,这样可以只检测maxfd以下的,从而扫描的个数正比于监听的fd个数,而不是始终是固定的FD_SETSIZE

缺点:

1.每次调用select都需要把三个集合传给内核,然后内核又把修改过的三个集合传回来,耗费时间

2.扫描时耗时与monitor的fd个数成正比,所以如果监听的个数很多,就会很慢

3.监听个数有上限

poll

基本和selec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值