常见的五种IO模型

本文深入探讨了BIO、NIO、AIO三种IO模型,解释了同步、异步、阻塞和非阻塞的概念。BIO是单线程下载,NIO支持多线程并行下载,而AIO则实现了真正的异步非阻塞。同步IO在等待资源时会阻塞,非阻塞IO通过轮询检查资源可用性。AIO则在资源准备和拷贝阶段都是异步的,提高了效率。
摘要由CSDN通过智能技术生成

2021.11.29补充

BIO、NIO、AIO的举例

你准备下载10个文件。

BIO就是单线程下载,一个下载完了,再去下载另一个,如果某个文件卡在那里了,它也会死等。

NIO就是多线程下载,支持同时下载,哪个网络资源准备好了,就可以下载了,可以多个文件同时进行。有一个文件卡了,不影响其他线程的下载。

AIO不仅仅是多线程下载,下载完了还告诉你一声,我已经下载完了哈


阻塞与非阻塞

资源不可用时,阻塞等待,此时不能进行其他操作,这就叫阻塞。

资源不可用时,立即返回,此时可以进行其他操作,这就叫非阻塞。

同步和异步

同步操作IO指的是,通过轮训或等待的方式,等待IO操作结果。

异步指的是,通过结果回调通知的方式,实现IO操作结果的获取。

阻塞IO(BIO)

死等。你只要不来,我就不走。

1. 等待数据可用。

2. 等待数据加载到内核缓冲区

3. 等待数据从内核缓冲区复制到用户空间。

示例:界面的模态窗,你不输入点什么,或者关闭当前窗口,休想继续下一步。

同步IO在等待资源可用,以及资源加载的过程都是同步阻塞进行的。

轮询式非阻塞IO(NIO)

一会儿问你来不来,你说不来。一会再来问问你来不来,直到你来。(一会催你一下,一会催你一下,只能接待你一个人)

示例:通过while循环的方式,等待输入为“q”的时候,控制台退出。直到等到一个条件的成立,才会结束。

非阻塞IO采用轮训的方式,检查资源的可用性,在资源复制的过程中,仍然是同步等待的。

多路复用IO

不再采用轮训的方式,查看资源的可用性,而是资源准备好后,内核主动通知到应用程序。有个哨兵负责监听资源的可用性,一旦资源可用,将通知到进程进行处理。

信号驱动IO

我跟你说个电话,你要来的话给我打电话,我再来接待你。

资源准备阶段采用信号的方式进行异步告知,资源拷贝阶段仍然是阻塞式,

异步非阻塞IO(AIO)

我找个人来等你,接待完了再跟我说一声。

资源的可用性阶段和资源拷贝阶段都是异步的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值