同步 异步 阻塞 非阻塞,傻傻分不清楚

前言

大家做socket编程时,经常会遇到同步 异步 阻塞 非阻塞这种术语,很混乱,大家的解释也是千奇百怪,下面就说下我的理解。

应该把它们拆分开来,同步与异步是一个维度,阻塞与非阻塞是一个维度。

从数据通信角度考虑

判断是阻塞还是非阻塞,主要是看函数没有数据接收时是否立刻返回,比如recv函数,如果它执行的时候有数据就接收数据,然后返回接收到的数据总和。没有数据就一直等待直到有数据。那么就是阻塞的,如果他执行的时候是有数据就接收数据,然后返回接收到的数据总和,没有数据就立刻返回0,那么他就是非阻塞的。

判断是同步还是异步的方法是:
同步:需要用户进程主动将存放在内核缓冲区中的数据拷贝到用户进程中。
异步:内核会自动将数据从内核缓冲区拷贝到用户缓冲区,然后再通知用户。

其他

同步异步也好,阻塞非阻塞也罢,都能说得通,不过同步异步一般范围更大些,既可以指某一特定数据处理过程,也可以指的一个业务处理流程,是一次解决呢还是分批处理。而阻塞非阻塞通常指的是数据接收处理这种特定情况。

举个栗子:
如果你想吃一份宫保鸡丁盖饭:
同步阻塞:你到饭馆点餐,然后在那等着,还要一边喊:好了没啊!
同步非阻塞:在饭馆点完餐,就去遛狗了。不过溜一会儿,就回饭馆喊一声:好了没啊!
异步阻塞:遛狗的时候,接到饭馆电话,说饭做好了,让您亲自去拿。 (电话通知)
异步非阻塞:饭馆打电话说,我们知道您的位置,一会给你送过来,安心遛狗就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值