Linux下处理非阻塞IO方法:select函数与 poll函数的区别

一.  简介

本文来学习 Linux下处理非阻塞IO访问的两种函数: select函数与 poll函数。

主要来说明一下,select函数与 poll函数的主要区别。

二.  Linux下处理非阻塞IO方法:select函数与 poll函数的区别

select 和 poll 都是 POSIX 标准提供的 I/O 多路复用机制,它们(是应用层的函数)都可以被用于实现非阻塞式 IO访问

select函数与 poll函数的区别:

1. 参数形式不同:

select 函数使用 fd_set 类型的描述符集合来传递需要监视的文件描述符列表,而 poll 函数使用 struct pollfd 数组类型来指定需要监听的文件描述符及其感兴趣的事件。

2. 描述符数量限制不同:

select 函数所支持的最大描述符数量由内核设定,一般情况下默认值为 1024;而 poll 函数能够处理的描述符数量没有固定上限,但也会受到系统资源限制。

3. 提供的事件标志位不同:

select 函数仅支持三种事件标志:可读、可写和异常;而 poll 函数支持更多的事件标志:可读、可写、异常、连接断开、优先级带数据和错误事件等。

4. 实现方式不同:

select 函数和 poll 函数之间在实现机制上有很大区别,主要表现在对文件描述符集合的维护上。select 函数每次调用时都需要将待检测的文件描述符集合拷贝到内核中去,而 poll 函数则是通过参数传递文件描述符集合,不需要对文件描述符集合进行操作。

5. 兼容性不同:

select 函数是传统的多路复用机制,可以在大多数 UNIX 系统上使用;而 poll 函数是 POSIX 标准中才定义的 I/O 多路复用机制,不是所有平台都支持。另外,在一些平台上,select 函数会有一些问题,例如无法正确处理大于 1024 的文件描述符数量等,但是这些问题并不影响 poll 函数的使用。

总结

select函数与 poll函数最主要的区别是:

描述符数量限制不同: select 函数所支持的最大描述符数量由内核设定,一般情况下默认值为 1024;而 poll 函数能够处理的描述符数量没有固定上限,但也会受到系统资源限制。

参考文章:

select与poll的异同_select和poll的区别-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值