阻塞非阻塞,同步异步,IO模型

IO包括数据就绪,数据读写

处理IO时,阻塞非阻塞都是同步IO,除非使用特殊API.

 

同步:数据读写由应用程序自己完成,异步则由操作系统处理,处理完毕后通知应用程序。

Linux上的五种IO模型

1. 阻塞IO

调用函数后,在函数返回前,什么也不做,只不停检查该函数是否返回,返回后才能进行下一步。

2.非阻塞IO

调用函数后,在函数返回前,每隔一段时间检查该函数是否返回,是否就绪,没有就绪就做其他事。总是立即返回,不管事件是否发生。未发生,返回-1.(EAGAIN,未发生,则反复调用)。

 3.IO复用

不像上面的只能检测一个IO事件,IO复用可以同时阻塞多个IO操作,同时对多个读写IO操作检测。直到有数据可读/写,才真正调用IO操作函数。

 4.信号驱动

用信号驱动接口进行信号驱动IO,安装一个信号处理函数,进程继续运行,当IO就绪,进程收到SIGIO信号,开始处理IO事件。(多线程处理比较麻烦)

 第一个阶段异步,第二个阶段同步。相较于非阻塞IO,避免了不断地轮询,减少了系统API调用次数,效率提高。

多路复用是内核们监听多个文件描述符,阻塞在监听的函数比如select, 拷贝数据也是阻塞的,多路复用只是防止进程在某个io阻塞后,不能及时处理其他io的事件。信号驱动则是先登记信号处理函数,当数据准备完毕后由内核发送信号给进程,让进程处理。信号驱动不阻塞在数据准备过程,但阻塞在数据拷贝,所以两者都是同步IO,

 5. 异步IO

调用异步IO接口告诉内核缓冲区指针和缓冲区大小,文件偏移和通知方式,函数立即返回,内核将数据拷贝到用户缓冲区后,再通知应用程序。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值