三种I/O多路复用方式优缺点比较

本文对比了三种I/O多路复用技术——select、poll和epoll的优缺点。select在处理大量fd时存在限制,poll虽无最大连接数限制但仍有复制开销,而epoll支持大量fd并提供更高效的事件通知,适用于高性能服务器。epoll有两种工作模式:边缘触发(ET)和水平触发(LT),ET模式更高效但编程难度较大。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

select的优缺点:
优点:
(1)select的可移植性好,在某些unix下不支持poll。
(2)select对超时值提供了很好的精度,精确到微秒,而poll式毫秒。

缺点:
(1)单个进程可监视的fd数量被限制,默认是1024。
(2)需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大。
(3)对fd进行扫描时是线性扫描,fd剧增后,IO效率降低,每次调用都对fd进行线性扫描遍历,随着fd的增加会造成遍历速度慢的问题。
(4)select函数超时参数在返回时也是未定义的,考虑到可移植性,每次超时之后进入下一个select之前都要重新设置超时参数。

poll的优缺点:
优点:
(1)不要求计算最大文件描述符+1的大小。
(2)应付大数量的文件描述符时比select要快。
(3)没有最大连接数的限制是基于链表存储的。

缺点:
(1)大量的fd数组被整体复制于内核态和用户态之间,而不管这样的复制是不是有意义。
(2)同select相同的是调用结束后需要轮询来获取就绪描述符。

epoll的优缺点(epoll详解):
(1)支持一个进程打开大数目的socket描述符(FD)
select 最不能忍受的是一个进程所打开的FD是有一定限制的,由F

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值