Linux|五种io模型

 

 

一.阻塞io

二.非阻塞io

三.信号驱动io

四.io多路转接

五.异步io


一.阻塞io

1.基本概念:

在内核将数据准备好之前,系统调用会一直等待。所有的套接字默认都是阻塞方式。直到内核将数据准备好,从内核拷贝到用户空间,系统调用才会返回。

2.举例:把鱼钩扔到水里,人(相当于系统)一直坐着等待鱼上钩。直到鱼上钩了,钓鱼的人才收网。

二.非阻塞io

1.概念:如果内核还未将数据准备好,系统调用仍然会直接返回,并且返回ewouldblock错误码。非阻塞io往往需要程序员循环反复尝试读写文件描述符,这个过程称为轮询。这对cpu来书是较大的浪费,一般只有特定场景下才使用。

2.举例:

钓鱼者将鱼钩扔到水里,每过一段时间去看是否有鱼上钩,直到有鱼上钩才将鱼钩拉起来。

三.信号驱动io

1.概念:内核将数据准备好的时候,使用SIGIO信号通知应用程序进行io操作

2.举例:

就像是在鱼竿上装了一个报警器,当鱼上钩时通知钓鱼者,钓鱼者去打鱼。

四.io多路转接

从流程上与阻塞io类似。实际上最核心在于io多路转接能够同时等待多个文件描述符的就绪状态

五.异步io

1.概念

由内核在数据拷贝完成时,通知应用进程(而信号驱动是告诉应用程序何时可以开始拷贝数据)

2.举例

把鱼竿扔到水里,让家人帮忙看着,把鱼钓起来后通知我。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值