文档章节

JAVA中IO技术:BIO、NIO、AIO

那位先生_
 那位先生_
发布于 2016/08/04 22:06
字数 1035
阅读 158
收藏 7

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

1、同步异步、阻塞非阻塞概念
同步和异步是针对应用程序和内核的交互而言的。 阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。

由上描述基本可以总结一句简短的话,同步和异步是目的,阻塞和非阻塞是实现方式。

1 同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 自己上街买衣服,自己亲自干这件事,别的事干不了。

2 异步 异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知(异步的特点就是通知) 告诉朋友自己合适衣服的尺寸,大小,颜色,让朋友委托去卖,然后自己可以去干别的事。(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS)

3 阻塞 所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待 状态, 直到有东西可读或者可写为止 去公交站充值,发现这个时候,充值员不在(可能上厕所去了),然后我们就在这里等待,一直等到充值员回来为止。(当然现实社会,可不是这样,但是在计算机里确实如此。)

4 非阻塞 非阻塞状态下, 如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等待, 银行里取款办业务时,领取一张小票,领取完后我们自己可以玩玩手机,或者与别人聊聊天,当轮我们时,银行的喇叭会通知,这时候我们就可以去了。

2、Java对BIO、NIO、AIO的支持:

Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,

3、BIO、NIO、AIO适用场景分析:

BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

另外,I/O属于底层操作,需要操作系统支持,并发也需要操作系统的支持,所以性能方面不同操作系统差异会比较明显。

本文转载自:http://www.cnblogs.com/doit8791/p/4951591.html

那位先生_

那位先生_

粉丝 130
博文 109
码字总数 242433
作品 0
深圳
后端工程师
私信 提问
加载中

评论(0)

Java NIO学习系列六:Java中的IO模型

  前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multiplexing) 异步I/O(asynchronous IO) ...

osc_ai011l20
2019/07/29
4
0
以Java的视角来聊聊BIO、NIO与AIO的区别?

转: 以Java的视角来聊聊BIO、NIO与AIO的区别? 飞丫玲丫 17-07-2623:10 题目:说一下BIO/AIO/NIO 有什么区别?及异步模式的用途和意义? BIO(Blocking I/O)同步阻塞I/O 这是最基本与简单的...

osc_1tcqot5f
2019/03/09
4
0
Java提供了哪些IO方式?IO, BIO, NIO, AIO是什么?

  IO一直是软件开发中的核心部分之一,而随着互联网技术的提高,IO的重要性也越来越重。纵观开发界,能够巧妙运用IO,不但对于公司,而且对于开发人员都非常的重要。Java的IO机制也是一直在...

osc_yny7gjj7
2018/08/27
2
0
漫话:如何给女朋友解释什么是BIO、NIO和AIO?

周末午后,在家里面进行电话面试,我问了面试者几个关于IO的问题,其中包括什么是BIO、NIO和AIO?三者有什么区别?具体如何使用等问题,但是面试者回答的并不是很满意。于是我在面试评价中写...

漫话编程
2019/07/01
1.3K
0
Tomcat的BIO、NIO、APR模式对比与性能测试结果

11.11活动当天,服务器负载过大,导致部分页面出现了不可访问的状态、那后来就要求调优了,下面是tomcat bio、nio、apr模式以及后来自己测试的一些性能结果。 原理方面的资料都是从网上找的,...

DemonsI
2019/02/15
228
0

没有更多内容

加载失败,请刷新页面

加载更多

[分享] 使用ApiPost测试接口时需要先登录的接口怎么办(基于Cookie)?

在后台在开发、调试接口时,常常会遇到需要登陆才能请求的接口。 比如:获取登陆用户的收藏列表,此时,我们就需要模拟登陆状态进行接口调试了。如图: 今天,我们讲解利用ApiPost的环境变量...

小台6
55分钟前
18
0
Codewars 解析化学分子式为原子

思路:递归的解析内部的分子式,并将结果进行合并。在处理过程中,要注意括号的匹配问题,根据题目要求发现不平衡的括号就抛出异常。 import java.util.*;class MyScanner { final sta...

reter
59分钟前
25
0
Win10 安装子系统 GUI 界面

Win10安装子系统后,默认是没有图形界面的,如果需要启动图形化界面则需要安装VcXsrv,再配置相关参数后子系统才能启动图形化界面。本文档以Win10安装Ubuntu系统为例子展开讲解。 安装VcXsr...

老孟的Linux私房菜
今天
17
0
Istio Sidecar注入原理

概念 简单来说,Sidecar 注入会将额外容器的配置添加到 Pod 模板中。这里特指将Envoy容器注应用所在Pod中。 Istio 服务网格目前所需的容器有: istio-init 用于设置 iptables 规则,以便将入...

好运来了
今天
24
0
怎么给视频进行调色?这款软件在手机上就能完成!

怎么给视频进行调色?一段视频的好坏由两部分构成,三分拍摄、七分剪辑是很多人都认同的观点。视频的拍摄是环境、拍摄对象等多个因素的集合结果,免不了出现纰漏,导致拍摄出来达不到理想效果...

斯卡哈
今天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部