什么是IO多路复用?说说IO流

我们先说一下什么IO的过程,Linux里面IO分为两步:
1、数据准备阶段(waiting for data to be ready),就是把线程缓冲区的数据复制到某个内核缓冲区
2、数据从内核缓冲区复制到进程缓冲区(copying the data from the kernel to the process)。
然后我们再来说一下常用的IO模型:
1、BIO 同步阻塞模型,他的整个过程都是阻塞的
2、NIO 同步非阻塞模型,他使用忙轮询的方式,不断检查数据是否可以复制。
3、IO多路复用,他有三种实现方式:select、poll、epoll。
select:使用文件描述符集合管理需要进行监控的文件描述符,然后把文件描述符集合复制到内核空间,让内核空间去监测这个文件描述符集合,内核空间监控到之后,把那些可以进行复制的文件描述符集合告诉select,select遍历文件描述符集合,找出这些文件描述符进行读写。
缺点:文件描述符集合的大小有限制,最大1024,频繁在内核空间和进程空间之间复制,开销很大。
poll模式跟select模式类似,区别是poll模式的文件描述符集合没有1024的限制。
epoll模式,是用一个文件描述符管理文件描述符集合,内核空间和进程空间只需要复制一次就可以了。
他通过三个函数来完成:epoll_create用来创建专用的文件描述符,epoll_ctl用来注册需要监控的事件,epoll_wait用来等待事件的产生。
epoll对文件描述符的操作有两种方式LT和ET,LT是通知了进程空间后,可以不马上处理,如果没有处理的话,下次还会继续通知。ET是只通知一次,就算没有处理,下次也不再通知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值