IO系列文章之一:UNIX IO模型的学习与总结

原先对于IO模型的认识总是很模糊,前段时间系统的学习了一下,分享出来,希望对看到的人有帮助。

UNIX网络编程中,将IO模型划分为5种:

(1)阻塞IO (2)非阻塞IO (3)信号驱动IO (4)IO复用 (5)异步IO

1、IO操作的2个步骤

以上5种IO操作都分成了两个步骤:发起IO请求实际IO操作

(1)发起IO请求:IO请求一般需要请求特殊资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。

(2)实际IO操作:真正进行数据接收。

2、IO分类

步骤1(发起IO请求):分为阻塞IO非阻塞IO,区别(看发起IO请求是否阻塞进程):

应用程序调用后,不能立即返回的称为阻塞IO:即资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。

能立即返回的称为非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用。

步骤2(实际IO操作):分为同步IO异步IO,区别(看实际IO操作是否阻塞进程):

在将数据从内核拷贝到用户空间时,将数据拷贝到应用缓冲区期间是否阻塞。

也就是说,如果实际IO读写阻塞请求进程(应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败),那么就是同步IO。

如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你(应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用),那么就是异步IO。

 

综上所述,前4种属于同步IO,最后一种才是异步IO。虽然(2)(3)(4)种IO是非阻塞IO,但其实也只是同步非阻塞,不能算异步。

 

附:UNIX网络编程一书中的截图(来源于网络)

阻塞IO:
非阻塞IO:

 IO复用:

 信号驱动IO:

 异步IO:


5种IO模型比较:

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值