java中的IO主要源自于网络和本地文件
IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO
在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒绝请求,如果有的话,客户端会线程会等待请求结束后才继续执行。
BIO与NIO一个比较重要的不同,是我们使用BIO的时候往往会引入多线程,每个连接一个单独的线程;而NIO则是使用单线程或者只使用少量的多线程,每个连接共用一个线程。
NIO的最重要的地方是当一个连接创建后,不需要对应一个线程,这个连接会被注册到多路复用器上面,所以所有的连接只需要一个线程就可以搞定,当这个线程中的多路复用器进行轮询的时候,发现连接上有请求的话,才开启一个线程进行处理,也就是一个请求一个线程模式。
在NIO的处理方式中,当一个请求来的话,开启线程进行处理,可能会等待后端应用的资源(JDBC连接等),其实这个线程就被阻塞了,当并发上来的话,还是会有BIO一样的问题。
HTTP/1.1出现后,有了Http长连接,这样除了超时和指明特定关闭的http header外,这个链接是一直打开的状态的,这样在NIO处理中可以进一步的进化,在后端资源中可以实现资源池或者队列,当请求来的话,开启的线程把请求和请求数据传送给后端资源池或者队列里面就返回,并且在全局的地方保持住这个现场(哪个连接的哪个请求等),这样前面的线程还是可以去接受其他的请求,而后端的应用的处理只需要执行队列里面的就可以了,这样请求处理和后端应用是异步的.当后端处理完,到全局地方得到现场,产生响应,这个就实现了异步处理。
BIO是一个连接一个线程。
NIO是一个请求一个线程。
AIO是一个有效请求一个线程。
- 大小: 32 KB
分享到:
相关推荐
java的bio nio aio 几种io的详细解释
基于java的BIO、NIO、AIO通讯模型代码实现
对java io总结时编写的测试代码,包括BIO,NIO,AIO的实现,Java io操作是编程人员经常使用到的,以前只是使用没有对这三种IO做系统的了解,本文将对这三种IO作详细的介绍并附有测试完整代码
一站式学习Java网络编程 全面理解BIO:NIO:AIO1
java bio nio aio socket
netty案例,netty4.1基础入门篇零《初入JavaIO之门BIO、NIO、AIO实战练习》 ...
主要是介绍java方面网络方面 网络通信方面的面试题,核心内容主要是关于BIO,NIO,AIO,Netty的面试,算是一套八股文吧,还是老话,该背的还是要背一背!!!
【Java IO】从NIO到Reactor三种模式 博客地址:https://blog.csdn.net/qq_36963950/article/details/107998164
用Java代码来告诉您什么是BIO, 什么是NIO, 什么是AIO
Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入 输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。 在Java类库中,IO部分的内容是很庞大的,...
IO模型决定了数据的传输方式,Java支持BIO,NIO,AIO三种IO模型。BIO是同步阻塞模型,特点是一对一的客户端与处理线程关系,适用场景是连接数量较小并且固定的,优点是编程简单,但对服务器资源要求高。NIO是同步非...
java 网络通信 aio bio nio 例子 参考以下网址 https://blog.csdn.net/anxpp/article/details/51512200
教程视频:网络编程高级(同步、异步、NIO、BIO、AIO)。
BIO,NIO,AIO,Netty面试题 35道.pdf Java并发编程最全面试题 123道.pdf Java并发编程面试题 75题.pdf JAVA核心面试知识点整理.pdf Java垃圾收集必备手册.pdf Java虚拟机(JVM)面试题 51道.pdf SpringBoot面试题 30道...
主要介绍了Java中BIO、NIO和AIO的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
包含BIO、NIO、AIO及Netty等知识点的面试题及答案 适合将要参加Java开发工程师岗位面试的同学,熟悉相关知识点,更好的应对面试
主要为大家详细介绍了Java中BIO、NIO、AIO的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
BIO、NIO、AIO、Netty 什么是IO:Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序 进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。在Java...
本篇文章主要介绍了Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码),具有一定的参考价值,感兴趣的小伙伴们可以参考一下