zoukankan      html  css  js  c++  java
  • 同步和异步以及阻塞和非阻塞

     

    同步、异步:

    概念:消息的通知机制

    解释:涉及到IO通知机制

    所谓同步,就是发起调用后,被调用者处理消息,必须等处理完才直接返回结果,没处理完之前是不返回的,调用者主动等待结果;

    所谓异步,就是发起调用后,被调用者直接返回,但是并没有返回结果,等处理完消息后,通过状态、通知或者回调函数来通知调用者,调用者被动接收结果。

    阻塞、非阻塞:
    概念:程序等待调用结果时的状态
    解释:涉及到CPU线程调度;

    所谓阻塞,就是调用结果返回之前,该执行线程会被挂起,不释放CPU执行权,线程不能做其它事情,只能等待,只有等到调用结果返回了,才能接着往下执行;

    所谓非阻塞,就是在没有获取调用结果时,不是一直等待,线程可以往下执行,如果是同步的,通过轮询的方式检查有没有调用结果返回,如果是异步的,会通知回调。

    经典故事案例:
    人物:老张
    道具:普通水壶(水烧开不响);响水壶(水烧开发出响声)
    案例:
                           1、同步阻塞:
                                 老张在厨房用普通水壶烧水,一直在厨房等着(阻塞),盯到水烧开(同步);
                           2、异步阻塞:
                                 老张在厨房用响水壶烧水,一直在厨房中等着(阻塞),直到水壶发出响声(异步),老张知道水烧开了;
                           3、同步非阻塞:
                                 老张在厨房用普通水壶烧水,在烧水过程中,就到客厅去看电视(非阻塞),然后时不时去厨房看看水烧开了没--(轮询检查同步结果);
                           4、异步非阻塞:
                                 老张在厨房用响水壶烧水,在烧水过程中,就到客厅去看电视(非阻塞),当水壶发出响声(异步),老张就知道--水烧开了。

     

    注意:
             1、通常的IO、NIO操作,都是同步的;
             2、JDK1.7提供了AIO异步操作的类,如AsynchronousSocketChannel、AsynchronousServerSocketChannel等;
                   Java也可以通过多线程,在开启的线程中,通过回调方式,实现异步操作。

  • 相关阅读:
    iptables作为路由转发至后端web服务器
    AWS EC磁盘扩容针对XFS
    MongoDB集群分片部署
    理解Java对象:要从内存布局及底层机制说起,话说….
    类和对象在JVM中是如何存储的,竟然有一半人回答不上来!
    SpringBoot项目中,如何更规范的使用PageHelper分页?
    面试被问,一千万个整数里面快速查找某个整数,你会怎么去做?
    Spock单元测试框架实战指南三-If esle 多分支场景测试
    IDEA激活码,2021年最新IDEA永久激活码无偿分享!
    MQ消息队列(应用场景,产品对比)
  • 原文地址:https://www.cnblogs.com/DianaChen/p/10472371.html
Copyright © 2011-2022 走看看