从同步阻塞聊到Java三种IO方式
- 阻塞非阻塞 指的是在客户端
- 阻塞:意味着 客户端提出一个请求以后,在得到回应之前,只能等待
- 非阻塞:意味着 客户端提出一个请求以后,在得到回应之前,客户端还可以做其他事情
- 同步异步 指的是服务器端
- 同步:意味着 服务器接受一个请求后,在返回结果以前不能做其他的事情
- 异步:意味着 服务器接受一个请求后,尽管还没有返回结果,但是可以做其他的事情
- 小明傻傻地等着收银员用计算器算出所有物品的总价,并准备付款。(同步阻塞:小明在请求响应之前,一直在等待;收银员没有做别的事情,一直在处理小明的请求)
- 小明觉得自己太傻了,于是一边和女朋友聊天,一边催促收银员快点计算出总价。(同步非阻塞:小明在请求响应之前,做了其他的事情;收银员一直在处理小明的请求)
- 小明傻傻地等着收银员的总价结果,收银员却把计算的工作交给计算机之后就去拿袋子帮忙装东西,直到计算机上出现了总价结果,收银员才继续回来完成收款工作。(异步阻塞:小明在请求响应之前,一直在等待;收银员在处理小明请求的过程中,处理了其他的事情)
- 小明觉得自己太傻了,于是一边和女朋友聊天,一边催出收银员快点计算出总价,而收银员却把计算的工作交给计算机之后就去拿袋子帮忙装东西,直到计算机上出现了总价结果,收银员才继续回来完成收款工作。(异步非阻塞:小明在请求响应之前做了其他的事情;收银员也在处理请求的过程中,处理了其他的事情)
- 阻塞,非阻塞,指的是小明是否在等待处理结果的过程中去做了其他的事情。
- 同步,异步,指的是收银员是否在处理收款这一请求的过程中去做了其他的事情,这也导致了收款的结果是当时告诉了小明,还是之后又进行了额外的通知。
- 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻
- 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的响声。
- 老张把响水壶放到火上,立等水开。(异步阻塞)老张觉得这样傻等意义不大
- 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
- 所谓同步异步,只是对于水壶而言。
- 普通水壶,同步;响水壶,异步。
- 虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。
- 同步只能让调用者老张去轮询自己(情况2中),造成老张效率的低下。
- 所谓阻塞非阻塞,仅仅对于老张而言。
- 立等的老张,阻塞;看电视的老张,非阻塞。
- 情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。
- 同步阻塞:在此种方式下,用户进程在发起一个IO请求以后,必须等待IO请求的返回,只有当IO请求返回以后,用户进程才能继续运行。JAVA传统的IO模型(BIO)属于此种方式。
- 同步非阻塞:在此种方式下,用户进程发起一个IO请求以后便可以返回做其它事情,但是用户进程需要时不时的询问IO操作是否就绪,这就要求用户进程不停的去询问,从而引入不必要的CPU资源浪费。其中目前JAVA的NIO就属于同步非阻塞IO。
- 异步非阻塞:此种方式用户进程发起一个IO请求后,便返回做其他事情,而真正处理IO的应用发起一个IO操作以后,不等待内核IO操作的完成,也可以处理其他事情,等内核完成IO操作以后会通知处理IO的应用,处理IO的应用再通知用户进程。目前JAVA中的AIO就属于异步非阻塞IO。
- AsynchronousSocketChannel
- AsynchronousServerSocketChannel
- AsynchronousFileChannel
- AsynchronousDatagramChannel
从同步阻塞聊到Java三种IO方式的更多相关文章
- Java三种IO模型和LinuxIO五种IO模型
Java: https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/BIO-NIO-AIO.md https://github.co ...
- Java三种编译方式
Java程序代码需要编译后才能在虚拟机中运行,编译涉及到非常多的知识层面:编译原理.语言规范.虚拟机规范.本地机器码优化等:了解编译过程有利于了解整个Java运行机制,不仅可以使得我们编写出更优秀的代 ...
- java三种调用方式(同步调用/回调/异步调用)
1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口: 3:异步调用:一种类似消息或事件的机制 ...
- 谈IO中的阻塞和非阻塞,同步和异步及三种IO模型
什么是同步和异步? 烧水,我们都是通过热水壶来烧水的.在很久之前,科技还没有这么发达的时候,如果我们要烧水,需要把水壶放到火炉上,我们通过观察水壶内的水的沸腾程度来判断水有没有烧开.随着科技的发展,现 ...
- 【重学Java】多线程基础(三种创建方式,线程安全,生产者消费者)
实现多线程 简单了解多线程[理解] 是指从软件或者硬件上实现多个线程并发执行的技术. 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能. 并发和并行[理解] 并行:在同一时刻, ...
- Java多线程的三种实现方式
java多线程的三种实现方式 一.继承Thread类 二.实现Runnable接口 三.使用ExecutorService, Callable, Future 无论是通过继承Thread类还是实现Ru ...
- java代码中init method和destroy method的三种使用方式
在java的实际开发过程中,我们可能常常需要使用到init method和destroy method,比如初始化一个对象(bean)后立即初始化(加载)一些数据,在销毁一个对象之前进行垃圾回收等等. ...
- Java中List集合的三种遍历方式(全网最详)
List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍. 我总结了三种List集合的遍历方式,下面一一来介绍. 首 ...
- Java连接Oracle数据库的三种连接方式
背景: 这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询. SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQ ...
随机推荐
- webpack3中使用postcss-loader和autoprefixer给css3样式添加浏览器兼容
1.在webpack中需要处理css必须先安装如下两个loader npm install --save-dev css-loader style-loader 2.要处理sass和添加浏览器前缀需要 ...
- 一年iOS工作经验,如何一举拿下百度、美团、快手等Offer面经(附面试题)
前言: 先简单说说我最近的面试经历吧.面试的公司很多,大部分最后都能得到令人满意的结果,我将这些体会记录下来,面了这么多公司,如果不留下什么,那岂不是太浪费了.对于我来说,这也是一次自我检查,在这次面 ...
- 2018 年 3 月 iOS架构师 面试总结
序言: 今年2月中下旬因为个人原因,换了一份工作,3月初期间面试了有3,4家,基本都是D轮或者刚刚上市的公司,也有上榜的BAT,也从他们的面试笔试中看到了自己的一些不足,于是就想写出来和大家分享一下, ...
- python爬微信公众号前10篇历史文章(4)-正则表达式RegularExpressionPattern
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. Pytho ...
- 第一把机械键盘 ikbc C-87
终于入了机械键盘,ikbc C-87黑色红轴. 原本上周五晚上就到了,但是那个键盘有几个键弹起后弹簧会持续响,敲了一会,实在不能忍受,就申请换货了.新换的键盘今天终于到了,没有了之前的问题,但是几乎每 ...
- WebPack的安装
一.前提因为webpack是一个基于node的项目,所以首先需要确保你的电脑里面已经安装了node.js,以及npm.在这里我使用的版本是:node:v5.8.0 ,npm:3.7.3,若是版本问题, ...
- jenkins忘记密码怎么办?
在nginx配置文件中加上域名访问,重定向到本机的8080端口. server { listen 80; server_name tomcat.qinyj.top; root /application ...
- 将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置
配置web.xml,applicationContext.xml, spring-mvc.xml,applicationContext-shiro.xml,而且都有详细的说明. Web.xml是web ...
- curl 获取外网IP
#curl http://members.3322.org/dyndns/getip121.204.134.10
- 如何使用 RESTClient 调试微信支付接口
我们知道微信支付使用http协议进行api调用,body 使用xml格式,使用的一般http在线调试工具,无法进行xml数据的post. RESTClient 做的很好,支持各种http 方法,bod ...