操作系统I/O:阻塞和非阻塞

操作系统内核对于I/O只有两种方式:阻塞和非阻塞。

调用阻塞I/O时,应用程序需要等待I/O完成才返回结果,阻塞I/O的一个特点是调用之后一定要等到系统内核层面完成所有操作后,调用才结束。

调用非阻塞I/O跟阻塞I/O的差别为调用之后立即返回,返回后,CPU的时间片可以用来处理其他事务,此时性能是提升的。但是非阻塞I/O的问题是:由于完整的I/O没有完成,立即返回的并不是业务层期望的数据,而仅仅是当前调用的状态。为了获取完整的数据,应用程序需要重复调用I/O操作来确认是否完成。这种重复调用判断操作是否完成的技术叫做轮询。

轮询技术主要有以下四种:

1、read 

最原始、性能最低,通过重复调用来检查I/O的状态来完成完整数据的读取。在得到数据前,CPU一直好用在等待上。

2、select

改进了read,通过对文件描述符上的事件状态来进行判断。有一个较弱的限制为由于它采用一个1024长度的数组来存储状态,所以它最多可以同时检查1024个文件描述符。

3、poll

对select改进,采用链表方式避免数组长度的限制,其次它能避免不需要的检查。担当文件描述符较多时,它的性能还是低下。

4、epoll

LInux下效率最高的I/O事件通知机制,在进入轮询的时候如果没有检查到I/O事件,将会进行休眠,直到事件发生将它唤醒。它是真实利用了事件通知、执行回调的方式,而不是遍历查询,所以不会浪费CPU,执行效率较高。

5、kequeue

与epoll类似,仅在FreeBSD系统下存在。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值