美文网首页
理解同步、异步、阻塞和非阻塞

理解同步、异步、阻塞和非阻塞

作者: 傻猪侠 | 来源:发表于2017-06-06 17:38 被阅读26次

同步和异步是对相,阻塞与非阻塞也是相对的,这个好理解,但这两组术语之间怎么区分,或者有什么联系,从字面上确实有点绕,但从场景和使用出发还是很好理解的,虽是不同层次上的描述,但还是有一定制约的。这里的同步和阻塞并非指java中的锁相关概念。

使用场景

  1. 阻塞和非阻塞的术语一般用在IO操作上,线程操作也有用到
  2. 同步和异步的术语一般用在业务接口调用上或者业务描述上

狭义的理解:

  1. 阻塞和非阻塞就是指IO的工作模式,阻塞需独占线程
  2. 同步和异步指的接口提供的调用方式,同步需独占线程

广义的理解

  1. 阻塞和非阻塞是针对服务提供者来说的,或者说是针对实现来说的
  2. 同步和异步是对针对服务消费者来说的,或者说是针对上层调用来说的
  3. 业务接口提供方,提供的是阻塞的调用方式,那么调用方没有选择,只能是同步调用。
  4. 业务接口提供方,提供的是非阻塞的调用方式,那么该业务自然才用异步的调用方式。

本质

  1. 从计算机本身出发,其本质就是CPU为该事情分配的执行机会有没有被浪费掉,浪费掉了就是阻塞和同步,否则就是非阻塞和异步。
  2. CPU的执行机会指的线程调度的机会。由于该事情还没准备好,该线程被分配了执行时间,它也没办法执行。这就是阻塞和同步的,如果阻塞和异步的,那么该线程可以去做别的事。

场景经常有如下

  1. 调用业务接口执行某项业务时,直接返回业务结果。那么它是(业务)同步的(调用)阻塞的。
  2. 调用业务接口时,只返回调用是否成功,但没返回业务结果,需要另外一种方式,比如回调或者按频率尝试获取结果等。那么它是(业务)异步(调用)非阻塞的。
  3. IO操作时,阻塞和非阻塞术语会经常用到,比如阻塞模式和非阻塞模式
  4. 同步调用业务接口时,有可能是由于该接口在进行阻塞的IO操作引起起的,也有可能,也有可能是别的原因,比如在等别一个线程的执行结果。
  5. 异步调用业务口时,也有可能该接口使用了另一个线程在进行阻塞的IO操作,待有结果后再回调上层进行通知。

生活场景

  1. 某个人A(相当于一个线程)去中国银行办理业务,如果银行要求必须在窗口前排队挨个进行服务办理,那么银行提供的就是阻塞似的服务,这个人就必须这么耗着,不能离开去办别的事,那么A只能采用同步方式办理这个业务。
  2. 下次A又需要去中国银行办理同样的业务了,这次他学乖了,自己不去,而是让B去,那么A采用了异步的方式来办理该业务了。这回B傻眼了。
  3. 又有一次A要去招商银行办理业务,这次B也长教训了,不愿意去,只好骗C去了,招商银行不要求窗前排队,只要求在门口拿个号就行了,到时叫号办理,C发现前面还有好多人,如是去外面泡脚去了,回去找A报销,说排队排到脚痛,不泡脚不行呀。这回银行提供的是非阻塞的服务,A和C都是民步办理了业务。

相关文章

  • UNIX 的5种IO模型介绍

    IO模型同步、异步、阻塞、非阻塞socket阻塞与非阻塞,同步与异步 同步和异步 同步/异步主要针对C端-同步就像...

  • 谈论:同步异步阻塞非阻塞.md

    同步/异步:关注的方式(是否主动) 阻塞/非阻塞: 同步阻塞BIO: 同步非阻塞NIO: 异步非阻塞: 异步阻塞:

  • 同步、异步、阻塞、非阻塞,这下明白了

    同步阻塞,同步非阻塞,异步阻塞,异步非阻塞... 晕! 头! 转! 向! 对于小白来说,理解这些概念太难了。搜索这...

  • BIO NIO AIO

    BIO:同步阻塞IONIO:同步非阻塞IOAIO:异步非阻塞IO先弄清楚同步、异步,阻塞、非阻塞概念。 io操作分...

  • 阻塞非阻塞 同步异步 IO模型及其应用 NIO实现原理

    1.同步异步概念 2.阻塞非阻塞概念 3.常见I/O模型:同步阻塞IO,同步非阻塞IO,异步阻塞IO,异步非阻塞I...

  • Java AIO基础

    Java AIO(异步IO)特性是在Java7引入的。 [TOC] 同步异步、阻塞非阻塞的理解 同步和异步 同步和...

  • IO模型

    原文参考链接 四种状态 同步 异步 阻塞 非阻塞 IO分类 同步阻塞IO 同步非阻塞IO 异步非阻塞IO注意: 没...

  • Linux网络IO模型

    什么是同步与异步、阻塞与非阻塞 引用知乎 怎样理解阻塞非阻塞与同步异步的区别? 上面的一个回答,很生动的说明了同步...

  • 异步化介绍

    1.异步化介绍 1.1 同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞, 这个几个词已经是老生常谈,但是常常还...

  • Java IO

    Before IO 分为:同步、异步阻塞、非阻塞 同步和异步是目的,阻塞和非阻塞是实现方式。 一个IO操作其实分成...

网友评论

      本文标题:理解同步、异步、阻塞和非阻塞

      本文链接:https://www.haomeiwen.com/subject/iltnfxtx.html