关于IO模式

IO模型分为:

阻塞IO:在缺省情形下,所有套接口都是阻塞的,IO读取函数也应该是阻塞的。


非阻塞IO:把一个套接口设置成非阻塞,当某请求的IO操作非得把当前进程投入睡眠才能完成时,不要把本进程投入睡眠,而是返回一个错误,再根据这个错误值进行轮询。


IO复用(select和pool):当使用这两个IO复用方法时,阻塞的发生位置是在select和poll这两个系统调用中的当前使用的那一个系统调用处,而不是阻塞在真正的IO系统调用上。当select和poll等待到满足的情况时才执行真正的IO系统调用上,只是阻塞的位置发生了变化,其实原理和阻塞时和处理方式是一样的,但是IO复用的引入的目的是为了能够等待多个描述字的就绪,而不是单个描述字。


信号驱动(SIGIO) :信号让内核在描述字就绪时发送SIGIO信号通知我们。实现方法为:首先开启套接口的信号驱动IO功能,并通过sigaction系统调用安装一个信号处理函数,该系统调用立即返回,进程继续工作,这个没有阻塞。当数据报准备好读取时,内核就为该进程产生一个SIGIO信号,在信号处理函数中调用IO系统调用进行IO操作。


异步IO(asynchronous IO,POSIX的aio_系列函数):由POSIX规范定义。告知内核启动某个操作,并让内核在整个操作完成后通知我们。此种模型与信号驱动的区别在于:信号驱动IO是由内核通知我们何时可以启动一个IO操作,而异步IO是由内核通知我们IO操作在何时完成。并不导致请求阻塞。


同步IO(synchronous):导致请求进程阻塞,直到IO操作完成。

根据以上定义,阻塞IO、非阻塞IO、IO复用、信号驱动IO这四种模型都是同步IO模型,因为其中真正的IO操作将阻塞进程,只有异步IO模型与POSIX定义的异步IO相匹配。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值