IO中同步与异步、阻塞与非阻塞的超级通俗版解释

本文介绍了网络IO中的四种模式:同步与异步、阻塞与非阻塞,并通过生动的比喻来帮助理解这些概念的区别。

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

虽说是通俗版解释,但是在本文的开头,还是有必要先做一个极简化的介绍。

IO其实有好多种,在此仅以网络IO(相对清晰一点)来说。

我们列举这四种IO:

同步(synchronous) IO & 异步(asynchronous) IO,阻塞(blocking) IO & 非阻塞(non-blocking)

先谈阻塞and非阻塞:

阻塞就是网络数据没有ready的话,一直hold住当前的process,直到数据ready,从kernel拷贝数据到用户内存,然后放行process。

非阻塞是网络数据没有ready的话,就返回一个信号(比如btError)。等到有数据了,再根据网络模型的不同,采取相应的处理方式。

同步就是网络数据如果ready的话,会等待数据从kernel拷贝到用户内存的这个行为完成。

异步就是网络数据即使ready的话,也是直接返回一个信号(比如nReady)。

如果不求严谨的话,大可以把阻塞非阻塞视为网络IO底层的socket的自身行为,把同步异步视为操作socket的处理方式。

通俗而言

阻塞就是倔强的,不管老子准备好没有,你都得TM等老子。

非阻塞就是理智的,如果我没有准备好的话,您就别等我了,等我准备好了再说吧。

同步就是体贴的顾及他人感受的,如果您好了的话,我就会等您把东西给我,如果您没好的话,那我就可能先走了,不过这取决于您是阻塞还是非阻塞。

异步就是无视他人反馈的,老子不管你是啥情况(阻塞或者非阻塞),老子都不关心,反正老子就告诉你一下要取数据,告诉完就没老子啥事了。

本文是为帮助那些急需要知道这四种IO区别的人理解而写的,知识有限,文中难免有错误之处,望各位大侠指出。

若要真正去理解IO,还是请认真查阅各种权威资料,毕竟学知识是没什么捷径的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值