Linux学习(17)-I/O复用(1)select、poll

本节学习内容

1.I/O复用的作用

2.select接口(1.select接口的作用2.select相关接口3.select编程流程4.代码实现select)

3.poll接口

4.select与poll对比

一、I/O复用的作用

I/O复用使得程序同时监听多个文件描述符。(简单说:I/O复用相当于监视发送端谁有数据,有数据再去处理,从而做到类似于多线程编程)

二、select接口

1.select接口的作用

1)select只会监听三类事件(读、写、异常)

2)select只有LT操作模式(电平触发模式)

3)select接口流程:

第一步:监听文件描述符是否就绪

第二步:将就绪的文件描述符存放到fd_set集合中

第三步:检测fd_set中是否有文件描述符被设置

第四步:如果有,处理文件描述符中的事件(如果此过程产生新的描述符,将新描述符送至第二步)

第五步:所有事件处理完,关闭端口。

2.select相关接口

FD_ZERO( fd _ set* fdset); // 清除 fdset的所有位

FD_SET( int fd, fd _ set* fdset); // 将文件描述符添加到fdsrt中,对应位置值置1

FD_CLR( int fd, fd _ set* fdset); // 清除 fdset某一个位

int FD_ISSET( int fd, fd _ set* fdset);// 测试 fdset的位 fd 是否被设置

3.select编程流程(服务器端)

步骤:

1)创建套接字(指定端口、监听)

2)创建文件描述符(将套接字加入到文件描述符中)

3)创建fd_set集合(将文件描述符加到fd_set集合中)

4)创建select接口来监听文件描述符(如果文件描述符未就绪,阻塞)

5)文件描述符已就绪,判断文件描述符(连接套接字还是接收套接字)

6)连接套接字:接受内容并回复

接受套接字:将接受套接字将其转化为连接套接字从 2)步骤重新开始

7)关闭

4.代码实现select

服务器端:

客户端:

运行结果如下

三、poll接口

1.poll的作用

poll与select相似,也是一定时间内轮询一定数量的文件描述符,以测试其中是否就绪

不同:

(1)poll支持的事件类型更多

(2)不用像select一样有fdset集合,只用维护好poll数组(结构体)即可

2.poll支持的事件类型

3.代码实现poll

服务器端:

客户端代码与select客户端相同

结果如下

四、select与poll对比

相同点:

1.每次循环都要将所有描述符拷贝到内核空间

2.内核的实现方式都是 轮询 时间复杂度为O(n)

3.都是通过遍历所有描述符来找到就绪描述符 时间复杂度O(n)

4.都只有LE操作模式(电平操作)

不同点:

1.select只能处理三类事件(读、写、异常),poll可以处理多种时间(如上图poll事件表)

2.poll不需要创建fd_set集合,只需要定义poll结构体维护好poll数组即可

相关推荐
寒水馨9 小时前
Linux下载、安装 Codex CLI(附安装包codex-x86_64-unknown-linux-musl.tar.gz)
linux·openai·终端·ai编程·codex·智能体·codex cli
其实防守也摸鱼10 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·运维·网络·人工智能·学习·安全·macos
YM52e14 小时前
鸿蒙Flutter Padding内边距:EdgeInsets详解
android·学习·flutter·华为·harmonyos·鸿蒙
2601_9516443216 小时前
C语言二级备考指南
c语言·编程基础·编译环境·二级考试·题库选择
西安老张(AIGC&ComfyUI)16 小时前
第034章:ComfyUI&AIGC一阶段学习总结及下阶段学习安排
学习·aigc
777VG17 小时前
PostgreSQL +martin将多张表输出成一个 MVT
前端·数据库·postgresql
aax121345317 小时前
VOC 集群治理工程实操|美丽蓝天绿岛项目 RTO 工艺选型、管控方案与申报要
大数据·数据库·人工智能
IvorySQL18 小时前
PG 日报|优化缓冲区批量扫描,降低多套接字并发竞争
数据库·人工智能·postgresql·开源·区块链
这个DBA有点耶18 小时前
交易型数据库是什么?OLTP核心能力与2026选型指南
数据库·数据仓库·sql·database·数据库架构·olap·dba
冰封之寂18 小时前
Docker 资源管理终极指南:CPU、内存与 IO 的精细化控制
linux·运维·服务器·docker·云计算