zoukankan      html  css  js  c++  java
  • 你真的理解同步异步和阻塞非阻塞吗?

    同步、异步、阻塞、非阻塞都是和IO(输入输出)有关的概念。最简单的文件读取就是IO操作。而在文件读取这件事儿上,可以有多种方式。

    怎么理解同步,异步和阻塞,非阻塞?

    那我先讲下同步异步和阻塞非阻塞这两大块之间的区别

    他们针对的对象不同,好比A调用B,同步异步针对的是被调用者也就是B,阻塞非阻塞针对的是调用者也就是A。

    然后我们再来讲一下什么是同步和异步

    A调用B,同步异步针对得是调用方B

    如果是同步的话,B处理完后有结果了才通知A.

    如果是异步的话,B在接到请求后先告诉A我已经接到请求了,然后有结果后再通过callback、通知或者状态等方式再通知A。

    同步和异步最大的区别就是被调用方B的执行方式和返回时机。

    什么是阻塞和非阻塞?

    A调用B,我们针对得是调用方A

    如果是阻塞的话,A只能等待B返回结果后,才能去干别的事情

    如果是非阻塞得话就是A不用等着B返回结果,可以先去做别的事情。

    同步,异步和阻塞,非阻塞间的配合使用

    有人认为阻塞和同步是一回事儿,非阻塞和异步是一回事。但是这是不对的。同步场景中可能包含阻塞和非阻塞情况的。异步场景中可能包含阻塞和非阻塞情况的。

    Java中的三种IO模型

    在Java语言中,一共提供了三种IO模型,分别是阻塞IO(BIO)、非阻塞IO(NIO)、异步IO(AIO)。这里面的BIO和NIO都是同步的IO模型,即同步阻塞IO和同步非阻塞IO,异步IO指的是异步非阻塞IO。

    BIO (Blocking I/O):同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。

    NIO (New I/O):同时支持阻塞与非阻塞模式,但主要是使用同步非阻塞IO。

    AIO (Asynchronous I/O):异步非阻塞I/O模型。

    通过流程图的方式去理解

    同步阻塞IO

    针对Sender而言,请求发送出去以后,一直等到Receiver有结果了才返回,这是同步。在Sender获取结果的期间一直被blocked住了,也就是在此期间Sender不能处理其它事情,这是阻塞。

    异步阻塞IO

     

     针对Sender而言,请求发送出去以后,立刻返回,然后再等待Receiver的callback,最后再次请求获取response,这整个过程是异步。在Sender等待Receiver的callback期间一直被block住了,也就是在此期间Sender不能处理其它事情,这是阻塞。

    同步非阻塞IO

    针对Sender而言,请求发送出去以后,立刻返回,然后再不停的发送请求,直到Receiver处理好结果后,最后一次发请求给Receiver才获得response。Sender一直在主动轮询,每一个请求都是同步的,整个过程也是同步的。在Sender等待Receiver的response期间一直是可以处理其它事情的(比如:可以发送请求询问结果),这是非阻塞。

    异步非阻塞IO

     针对Sender而言,请求发送出去以后,立刻返回,然后再等待Receiver的callback,最后再次请求获取response,这整个过程是异步。在Sender等待Receiver的callback期间一直是可以处理其它事情的,这是非阻塞。

    应用说明

    (1)  Redis速度快的原因之一就是因为是异步非阻塞的。

    (2)  R2dbc和MyBatis/JPA一样都是访问数据库的技术,不同的是 R2DBC是异步非阻塞的MyBatis/JPA是同步阻塞。

     

    希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。

    扫描下方二维码关注微信公众号,您会收到更多优质文章推送。

    希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt
  • 相关阅读:
    AX 2012 Security Framework
    The new concept 'Model' in AX 2012
    How to debug the SSRS report in AX 2012
    Using The 'Report Data Provider' As The Data Source For AX 2012 SSRS Report
    Deploy SSRS Report In AX 2012
    AX 2012 SSRS Report Data Source Type
    《Taurus Database: How to be Fast, Available, and Frugal in the Cloud》阅读笔记
    图分析理论 大纲小结
    一文快速了解Posix IO 缓冲
    #转载备忘# Linux程序调试工具
  • 原文地址:https://www.cnblogs.com/liaowenhui/p/14617891.html
Copyright © 2011-2022 走看看