高级IO

五种IO模型:阻塞IO,非阻塞IO,信号驱动IO,异步IO,IO多路转接
在这里插入图片描述
阻塞:为了完成功能,发起调用,若当前不具备完成条件,则等待完成后返回
非阻塞:为了完成功能,发起调用,若当前不具备完成条件,则立即报错返回

阻塞与非阻塞的最大区别:发起调用之后是否立即返回

同步:为了完成功能,发起调用若当前不具备完成条件,则
自己等待完成后返回
异步:为了完成功能,发起调用之后,有其他人完成操作

同步与异步的区别:任务是否由自己来完成

异步阻塞:等待别人完成操作
异步非阻塞:不等待别人完成操作

同步异步的优缺点:同步操作效率较低,但是流程简单,异步操作效率较高,流程控制较难
多路转接IO(多路复用):select、poll、epoll
IO时间监控
对大量描述符进行是否具备IO条件的事件进行监控
作用:处理描述符的高并发事件

多路转接模型:
就绪:
读事件就绪:缓冲区中由数据可读取
写时间就绪:缓存区中由空闲空间
Select:内核中通过遍历的描述符集合中的描述符,判断是否相应时间就绪;若就绪了,则从集合中剔除那些没有就绪的描述符;用户通过这个集合直到那些描述符就绪,直接针对就绪操作
Int select (iny nfds, fd_set* readfds, fd_set* writefds, fd_set* excerptfds, struct timeval* timrout)

Nfds : maxfd + 1 最大的文件描述符+1
Fd_set:描述符集合–是一个位图,位图大小取决于_FD_SETSIZE = 1024
Readfds:可读事件集合
Writefds:可写事件集合
Exceptfds:异常事件集合
Timeout:设置select超时等待事件时间
在这里插入图片描述

在这里插入图片描述

Select优缺点:
优点:
1.select遵循posix标准,可以跨平台,移植性好
2.Select的超时等待时间控制可以更加精细到微秒
缺点:
1.select能够监控的描述符由上限限制,取决于_FD_SETSIZE = 1024
2.Select监控描述符原理是在内核中进行轮询遍历,性能随着描述符的增多而下降
3.Select监控会修改描述符集合中的内容,因此监控时每次都需要重新添加描述符
4.Select无法告诉用户具有那些描述符就绪,需要用户进行遍历才能获取到就绪的描述符
Poll:
在这里插入图片描述
优点:
1.poll使用时间结构数组对描述符关心的时间进行监控,简化了多个集合
2.Poll没有描述符上限的限制
缺点:
1.poll使用事件结构数组对描述符关心的时间进行监控,简化了多个集合的监控
2.Poll也不会告诉用户具体那些就绪,需要用户轮询判断
3.Poll也需要每次都将时间结构拷贝到内核中进行监控

Epoll:

接口:
int epoll_create(int size);
int epoll_ctl(int epfd, int op, int fd, struct epoll_event* event);
struct epoll_event
{
uint32_t events;
epoll_data;
}
int epoll_wait(int epfd, struct epoll_event* evrnt, int maxevents, int timeout);
在这里插入图片描述
epoll的实现原理:
对内核中添加的事件描述符进行监控,并且为这个描述符的时间设置射箭回调函数;若描述符就绪,则回调函数将这个时间结构放置到eventpoll结构体中的双向链表中

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值