同步异步阻塞非阻塞

同步和异步

描述的是线程与线程的关系。

  • 如果两个线程是同步的,调用者(线程A,通常是应用程序)需要等待被调用者(线程B,通常是内核)返回结果,才进行下一步的操作。

例子:你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。

  • 线程异步,调用者(线程A)不等待被调用者(线程B)返回,而是通过其他的方式,例如:
    • 时间
    • 回调

例子:步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。

阻塞和非阻塞

针对某一个线程来说的,线程要么阻塞要么非阻塞

具体来说是对与内核进行数据交互。

  • 阻塞:调用返回结果之前,线程挂起,得到结果后才返回

  • 非阻塞:在不能立刻得到结果的调用,该调用不阻塞这个进程,进程可以去做其他的事。

相互结合

同步阻塞:

发送方发送请求一直等待响应

接收方收到请求后,需要进行IO操作取得结果。因为这里是阻塞,就一直等待结果返回,再响应发送发。

同步非阻塞:

发送方一直等待响应

接收方处理请求,进行IO操作,如果IO操作立刻得到结果,就返回,否则就做其他的事情。

如果IO操作完成,再通知给接收方,接收方响应发送方。

发送方得到响应,结束等待。

异步阻塞:

发送方发送请求,不等待响应。进行其他的工作

接收方进行IO操作,如果不能得到结果,就一直等待结果返回,啥也不做。直到结果返回之后再给发送方。

异步非阻塞:

发送方发送请求,不等待响应。进行其他的工作

接收方进行IO操作,如果不能得到结果,不等待做其他的事。

IO完成之后再通知接收方,然后接收方响应发送方。

综上:

  • 同步异步描述的是指发送方接收方

  • 阻塞非阻塞是指发送方的处理方式接收方的处理方式

对于IO操作的同步/异步

同步阻塞IO:

  • 同步:应用程序调用IO时等待结果返回或者不断轮询是否完毕,只有拿到结果后才能继续进行。

    • 阻塞IO:IO操作彻底完成后返还给用户空间。中间啥也别干等着。
    • 非阻塞IO:IO执行后立刻返回一个状态值,不需要在那等着他完成。可以不断询问是否完成了。
  • 异步:应用程序调用IO时,不等待结果返回,直接做别的事。等IO结束后通知这个应用程序线程,或者使用回调函数。

    • 阻塞IO:同上
    • 非阻塞IO:同上

    img

    这里同步、异步指的是应用程序线程和内核之间的关系

    阻塞非阻塞是指内核准备数据的方式。

参考

1.https://www.cnblogs.com/loveer/p/11479249.html

2.https://www.zhihu.com/question/19732473/answer/20851256

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值