同步、异步、阻塞、非阻塞区别

同步、异步、阻塞、非阻塞
1.同步和异步的区别:
    是否有回调。
    如:本身去食堂排队买饭是同步,叫外卖是异步。linux


2.阻塞和非阻塞的区别:
    是否有辅助线程轮询,把完成结果通知真正用户线程。多线程

    若是是用户本身轮询那就叫同步非阻塞,若是是别人帮忙轮询并通知用户线程叫异步非阻塞。
    如,10我的去酒吧看世界杯,这时候安排一个服务生盯着电视,其余人都去各类happy,若是球赛开始,服务生会通知你们。这就是非阻塞。
            10我的去酒吧看世界杯,若是10我的什么也不干,就这么一直盯着电视等着球赛开始,这就是阻塞。app

 

如下是转载:异步

同步、异步:函数

  • 概念:消息的通知机制
  • 解释:涉及到IO通知机制;所谓同步,就是发起调用后,被调用者处理消息,必须等处理完才直接返回结果,没处理完以前是不返回的,调用者主动等待结果;所谓异步,就是发起调用后,被调用者直接返回,可是并无返回结果,等处理完消息后,经过状态、通知或者回调函数来通知调用者,调用者被动接收结果。

阻塞、非阻塞:

  • 概念:程序等待调用结果时的状态
  • 解释:涉及到CPU线程调度;所谓阻塞,就是调用结果返回以前,该执行线程会被挂起,不释放CPU执行权,线程不能作其它事情,只能等待,只有等到调用结果返回了,才能接着往下执行;所谓非阻塞,就是在没有获取调用结果时,不是一直等待,线程能够往下执行,若是是同步的,经过轮询的方式检查有没有调用结果返回,若是是异步的,会通知回调。

经典故事案例:(事实证实普通的水壶能够作到非阻塞,相比于高级水壶须要加一个轮询线程)

  • 人物:老张
  • 道具:普通水壶(水烧开不响);响水壶(水烧开发出响声)
  • 案例:

                       一、同步阻塞:spa

                             老张在厨房用普通水壶烧水,一直在厨房等着(阻塞),盯到水烧开(同步);线程

                       二、异步阻塞:blog

                             老张在厨房用响水壶烧水,一直在厨房中等着(阻塞),直到水壶发出响声(异步),老张知道水烧开了;开发

                       三、同步非阻塞:回调函数

                             老张在厨房用普通水壶烧水,在烧水过程当中,就到客厅去看电视(非阻塞),而后时不时去厨房看看水烧开了没                                                           (轮询检查同步结果);

                       四、异步非阻塞:

                             老张在厨房用响水壶烧水,在烧水过程当中,就到客厅去看电视(非阻塞),当水壶发出响声(异步),老张就知道                                                        水烧开了。

 

注意:

         一、一般的IO、NIO操做,都是同步的;

         二、JDK1.7提供了AIO异步操做的类,如AsynchronousSocketChannel、AsynchronousServerSocketChannel等;

               Java也能够经过多线程,在开启的线程中,经过回调方式,实现异步操做。

 

 

linux下5中IO模型

相关文章
相关标签/搜索