嵌入式学习day35

IO多路复用(IO多路转接)

1.多个IO复用一个进程

select

poll

epoll

1.创建文件描述符集合

2.添加文件描述符到集合中

3.通知内核开始检测

4.根据返回的结果做对应的操作(对IO读、写操作)

特点:

1.多个IO复用一个进程,不创建新的进程和线程,效率高

2.不适合处理比较耗时的任务

应用场景:

1.构建并发服务器,使用IO多路复用监测多个客户端套接字

2.使用IO多路复用监测多个IO所对应的通信(如:网络、串口、can...)

3.在阻塞IO中,进行超时监测

Linux下一切皆文件

select

检测多路IO

参数:

nfds 关注的文件描述符中的最大值加一(方便内核遍历查找)

readfds 关注的读事件的文件描述符集合

writefds 关注的写事件的文件描述符集合

exceptfds 其他(异常)

timeout 超时时间,如果不设置:NULL

返回值:

成功 返回内核通知的到达事件的个数

失败 返回-1

设置了超时时间,超时时间到达但没有事件 返回0

不足:

1.监听文件描述符最大个数为1024(数组) 时间复杂度(衡量效率):O(n)

2.监听的文件描述符集合在用户层,需要应用层和内核层互相传递数据

3.需要循环遍历一次才能找到产生的事件

4.只能工作在水平触发模式(低速模式)无法工作在边沿触发模式(高速模式)

网络调试:

epoll

epoll_create

epoll_ctl

参数:

epfds 文件描述符集合句柄

op:

fd 操作的文件描述符

event 文件描述符所对应的事件

event EPOLLIN:读操作

EPOLLOUT:写操作

epoll_wait

监测IO事件

参数:

epfd 文件描述符集合句柄

events 保存到达事件的结合的首地址

maxevents 监测是事件的个数

timeout 超时时间

-1:表示不设置超时时间

返回值:

成功 返回到达事件的个数

失败 返回-1

设置超时:超时时间到达则返回0

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值