zoukankan      html  css  js  c++  java
  • 原创:同步与异步、阻塞与非阻塞

    原创作品,转载请注明出处:http://www.cnblogs.com/albert1017/p/3914149.html 

    看了一些这两个概念的解释,感觉不分场景的笼统理解是不对的,下面陈述一下我的理解:

    这是两对概念,用在不同的语境会有一些不同的含义,不能一概而论。

    整体来说,同步就是两种东西通过一种机制实现步调一致,异步是两种东西不必步调一致。

    一、同步调用与异步调用:

    在用在调用场景中,无非是对调用结果的不同处理。

    我理解同步调用就是调用一但返回,就能知道结果,而异步是返回时不一定知道结果,还得通过其他机制来获知结果,如:

    a.   状态
    b.   通知
    c.   回调函数

    这里的同步调用不一定会阻塞,例如立即返回失败的结果。

    而异步调用立即返回时,你还拿不到结果的。

    二、同步线程与异步线程:

    同步线程:即两个线程步调要一致,要相互协商。两个线程的运行进度各不相同,怎么才能步调一致呢?我们直观的理解就是,快的等慢的呗!快的阻塞一下等到慢的步调一致即可。

    异步线程:步调不用一致,各自按各自的步调运行,不受另一个线程的影响。

    同步是指两个线程的运行是相关的,其中一个线程可能要阻塞等待另外一个线程的运行;

    异步的意思是两个线程毫无相关,自己运行自己的。

     三、同步通信与异步通信:

    这里的同步和异步是指:发送方和接收方是否协调步调一致!

    同步通信是指:发送方和接收方通过一定机制,实现收发步调协调。如:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式

    异步通信是指:发送方的发送不管接收方的接收状态,如:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

    阻塞和非阻塞就比较容易理解了,没有上面那么多场景,阻塞就是这个事情阻到这儿了,不能继续往下干事了,非阻塞就是这个事情不会阻碍你继续干后面的事情。

    阻塞可以是实现同步的一种手段!例如两个东西需要同步,一旦出现不同步情况,我就阻塞快的一方,使双方达到同步。

    同步是两个对象之间的关系,而阻塞是一个对象的状态。

    另外在写这个以前参考的文章:

    http://blog.chinaunix.net/uid-21411227-id-1826898.html

    http://blog.chinaunix.net/uid-26000296-id-3754118.html

    欢迎留言指出问题!

  • 相关阅读:
    java.lang.NoSuchMethodError:antlr.collections.AST.getLine() I
    T7 java Web day01 标签HTML
    T6 s1 day19
    T5 s5 Day18
    T5 s4 Day 17
    T5 s3 day16
    T5 s2 Day 15
    T5 s1 day14
    T4 S03 day 12
    T4 S01 day1
  • 原文地址:https://www.cnblogs.com/albert1017/p/3914149.html
Copyright © 2011-2022 走看看