ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

同步和异步以及阻塞和非阻塞

2019-03-04 18:48:50  阅读:379  来源: 互联网

标签:异步 同步 老张 水壶 阻塞 烧开


 

同步、异步:

概念:消息的通知机制

解释:涉及到IO通知机制

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

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

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

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

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

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

 

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

标签:异步,同步,老张,水壶,阻塞,烧开
来源: https://www.cnblogs.com/DianaChen/p/10472371.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有