同步IO,异步IO

博客介绍了常见的IO模型,包括阻塞、非阻塞、IO多路复用和异步,通过银行办理业务的例子生动说明。还阐述了同步IO和异步IO在调用IO阶段的区别,以及阻塞和非阻塞在IO操作阶段的含义,指出异步IO可提升系统多任务处理能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IO模型

常见的IO模型有阻塞、非阻塞、IO多路复用,异步。以一个生动的例子来讲解
(1)阻塞
周末去银行办理业务,到银行拿到号,不知道什么时候能轮到,只好坐在大厅里面等,直到轮到自己。这中间等待的时间就被浪费掉了.

(2)非阻塞
不想在大厅浪费时间等着,想出去溜达一下,又担心轮到自己,于是在外面逛一会,就回来询问服务人员轮到自己了没,来来回回好多次,也会浪费很多时间。这就是非阻塞

(3)IO多路复用
与第二个方案差不多,大厅安装了电子屏幕用来显示服务状态,这样我回来就不用去询问服务人员了,直接看电子屏幕就可以了,这就是典型的IO多路复用

(4)异步
不想在大厅等着,在外面放心地逛,轮到自己的时候,服务人员直接一个电话通知到我,这就是典型的异步。

同步IO,异步IO

同步IO 异步IO是调用IO阶段
在IO编程中,CPU的操作速度远远大于磁盘的读写,在一个线程中,CPU执行代码的速度极快,然而,一旦遇到IO操作,如读写文件、发送网络数据时,就需要等待IO操作完成,只有当真正完成了IO操作以后,用户进程才能运行。这种情况称为同步IO。JAVA传统的IO模型属于此种方式!

在同步IO操作过程中,当遇到IO操作,线程被挂起时,如果只有一个线程,那此时其他需要CPU执行的代码就无法被当前线程执行了,

此时我们会想到,可以通过多线程或者多进程来解决并发问题,但是不能无止境地来增加线程,因为cpu来回切换线是需要开销的。

此时会想到另一种解决IO问题的方法是异步IO。当代码需要执行一个耗时的IO操作时,它只发出IO指令,并不等待IO结果,然后就去执行其他代码了。一段时间后,当IO返回结果时,再通知CPU进行处理。

在“发出IO请求”到收到“IO完成”的这段时间里,同步IO模型下,主线程只能挂起,但异步IO模型下,主线程并没有休息,而是在消息循环中继续处理其他消息。这样,在异步IO模型下,一个线程就可以同时处理多个IO请求,并且没有切换线程的操作。对于大多数IO密集型的应用程序,使用异步IO将大大提升系统的多任务处理能力。

阻塞非阻塞

阻塞非阻塞是io操作阶段.
简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就是阻塞,否则就可以理解为非阻塞。
阻塞 所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待 状态, 直到有东西可读或者可写为止。

非阻塞 非阻塞状态下, 如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等待。
在这里插入图片描述

参考:
https://www.liaoxuefeng.com/wiki/1016959663602400/1017959540289152
https://www.cnblogs.com/Anker/p/3254269.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗琪小姐姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值