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

本文通过生动的比喻解释了同步与异步、阻塞与非阻塞的概念,强调它们分别对应于数据请求及数据读写的机制。通过逛商场与吃面的场景,形象地展示了这些概念的区别。

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

同步对应异步,阻塞对应非阻塞,两对概念的根本区别在于:所修饰的对象不同

阻塞和非阻塞是指进程访问的数据尚未准备就绪,进程是否要等待,还是直接返回。

同步异步是指访问数据的机制。同步是指主动请求并等待 IO 操作完毕的方式,当数据就绪后在读写的时候必须阻塞。异步则是在主动请求数据后开始其他任务随后等待 IO 操作完毕的通知,进程在进行数据读写时不阻塞。

拿书上举的例子来说明。

你在逛商场的时候,肚子饿了,于是进入一家面馆叫了一份面,这叫主动请求数据。随后老板开始做面。

如果你一直在店里等,一直到老板把面端上来,这叫阻塞

如果你不选择等待,而是继续逛街,等面做好了你再回来吃,这叫非阻塞;至于你如何获得面有没有做好的方式,多种多样,就是 select/poll/epoll/kqueue 等等。

如果你选择在店里吃面,吃完之后再去逛街,这叫同步。这个时候你先吃了面后逛了街。

如果你灵魂出窍,肉体在吃面,灵魂在逛街,等面吃完了,肉体召唤灵魂归位继续逛街,这个叫异步。这时候你又逛了街又吃了面。

所以可以看出,阻塞非阻塞修饰的是吃面前询问面有没有做好的阶段;同步异步修饰的是面已经端到你面前,你如何吃面的阶段。

这就分别对应询问数据是否就绪和如何读写数据的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值