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

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

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,还是请认真查阅各种权威资料,毕竟学知识是没什么捷径的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值