同步、异步、阻塞、非阻塞、IO模型的理解

本文详细介绍了同步、异步、阻塞、非阻塞的概念,通过银行办理业务的场景比喻,阐述了四种模式的特点和优缺点,并探讨了网络IO模型:阻塞IO、非阻塞IO、多路复用IO、信号驱动式IO和异步IO的工作原理。通过对比分析,帮助读者深入理解这些概念。

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

文字虽多,只要你一步一步往下看就能理解。
概念:
1.同步:调用发出后,调用者要一直等待返回结果,得到通知后,才能进行后续的执行;
2.异步:调用发出后,调用者不能立刻得到返回结果,执行部件在完成后,通过状态、通知和回调方式来通知调用者;
3.阻塞:调用结果返回前,当前线程被挂起,一直处于等待消息通知,不能够执行其他业务,只有在得到结果后才会返回;
4.非阻塞:在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回(不是想要的结果)。

通知的方式:
1.状态:即监听被调用者的状态(轮询),调用者需要每隔一定时间检查一次,效率会很低。
2.通知:当被调用者执行完成后,发出通知告知调用者,无需消耗太多性能。
3.回调:与通知类似,当被调用者执行完成后,会调用调用者提供的回调函数
使用哪一种通知机制,依赖于执行部件的实现,除非执行部件提供多种选择,否则不受调用者控制。

同步/异步 和 阻塞/非阻塞的区别:
可以理解为关注的对象不同:
1.同步/异步:数据未就绪,是否等待返回结果;
2.阻塞/非阻塞:数据未就绪,是否要阻塞线程;

场景比喻:
我去银行办理业务,可能会有两种方式:
1.选择排队等候;(同步)
2.选择取自己的候码牌,轮到我时由柜台的人通知我去办理业务;(异步)

就有以下4种模式
1.如果选择排队(同步),且排队的时什么都不干(线程被挂起,什么都干不了),是同步阻塞模型;
2.如果选择排队(同步),但排队的同时做与办银行业务无关的事情,比如玩手机,(线程未被挂起,还可以干其他的事)是同步非阻塞模型;
3.如果选择候码牌,坐在位置上等柜台叫号(状态、通知和回调),但是坐在位置上什么都不干(线程被挂起,什么都干不了),这是异步阻塞模型;
4.如果选择候码牌,坐在位置上等柜台叫号(状态、通知和回调),但坐着的同时还玩手机打游戏(线程没有被挂起,还可以干其他事情),这是异步非阻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值