阻塞、非阻塞、同步与异步IO的区别

IO读取数据的过程

如图所示,进程读取数据的过程主要分为两个步骤

1.内核将数据准备好到内核缓冲区

2.内核将数据拷贝到用户态

在上述这两个过程里,进程首先和内核打交道,之后内核再和硬件(如网卡)打交道

阻塞IO

如图所示,阻塞IO是指,无论用户进程和内核打交道还是内核和硬件打交道,这两个过程都阻塞,也就是说,进程要等待内核将数据在内核缓冲区准备好(第一个阶段),并且还要等待内核缓冲区的数据拷贝到用户态(第二个阶段)时才返回

非阻塞IO

非阻塞IO是指在第一个过程里不阻塞等待内核的结果,而是采用轮询的方式不断询问内核缓冲区中是否有数据,直到内核中有数据后,就在第二个阶段进行阻塞,保证数据成功从内核拷贝到用户

同步IO

同步io是指当进程发起IO后,必须等待IO操作完成

无论是阻塞IO还是非阻塞IO都是同步IO,因为二者都需要在第二个阶段里阻塞,等待内核将数据拷贝到用户,由于进程必须在第二个阶段等待,那么也就是说,进程在io的整个过程里都必须要等待内核将数据拷贝到用户才算成功,而在这个过程里,进程是不能去做其他事情的,无论你是轮询内核也好,等待内核也好

异步IO

异步IO是指,进程在调用io操作后,我无需关注结果在什么时候返回,届时你准备好了数据给我就可以了(通过回调机制完成),这个过程里我可以去做别的事情

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值