Linux下的五种I/O通信模型

同步,异步,阻塞,非阻塞的概念

首先,需要明确的一个问题就是,通常程序是运行在用户态下,如果需要进行I/O操作,那么就会发出系统调用(System call),由用户态转变为内核态,由操作系统去完成I/O操作,实际上应用程序本身没有权利操作I/O。

  • 同步和异步:都是针对应用程序和操作系统之间交互而言的。同步的话,如果上层应用程序不主动询问操作系统的话,操作系统不会主动通知应用程序。异步的话,操作系统主动通知应用程序。
  • 阻塞:如果条件不满足的话,操作系统将应用线程挂起或者休眠,此时应用线程处于阻塞状态,只有当数据准备好之后或者数据已经从内核空间拷贝到用户空间,操作系统通知线程,此为唤醒线程。
  • 非阻塞:如果条件不满足的话,该方法不会阻塞当前线程,而是立即返回一个标志信息(数据还没有准备好),或者timeout之后返回,此时应用线程还可以进行其他的操作。

要注意的问题:同步不等同于阻塞,同步调用的时候,即便调用不返回,但是应用线程还处于运行态,还可以做一些其它的事情。而阻塞调用时,应用线程处于阻塞的状态。


阻塞I/O模型

应用程序调用I/O函数,应用线程会阻塞,直到数据准备好为止。如果数据没有准备好,则应用线程一直等待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值