======================================================================
本系列IO模式详解 主要介绍BIO,NIO和AIO内容,深入了解源码+实战。目标是让小伙伴们可以快速了解IO的阻塞、同步、异步的现象、概念和特征以及优缺点。
===============================================================================
Java 3种常用的网络编程/IO 模型:BIO-同步阻塞IO(Blocking IO)、NIO-IO多路复用模型( IO multiplexing )(JAVA New IO)、AIO-异步IO(Asynchronous IO)
实际通信需求下,要根据不同的业务场景和性能需求决定选择不同的I/O模型
**BIO(blocking I/O) ** :同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时,服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销 。
JDK支持的版本:JDK1.4以前
Java BIO 就是传统的 java io 编程,其相关的类和接口在java.io
传统的 java.io包,它基于流模型实现,提供了我们最熟知的一些 IO 功能,比如 File 抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。
很多时候,人们也把 java.net下面提供的部分网络 API,比如 Socket、ServerSocket、HttpURLConnection 也归类到同步阻塞 IO 类库,因为网络通信同样是 IO 行为。
BIO优点 :是代码比较简单、直观,方便实现。
BIO缺点 :则是 IO 效率和扩展性存在局限性,容易成为应用性能的瓶颈。
BIO适用场景 :适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中。
Java NIO(New IO) : 同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器 上,多路复用器轮询到连接有 I/O 请求就进行处理
JDK支持的版本:JDK1.4开始支持
Java NIO 相关类都被放在 java.nio 包及子包下,提供了 Channel、Selector、Buffer 等新的抽象,可以构建多路复用的、同步非阻塞 IO 程序,同时提供了更接近操作系统底层的高性能数据操作方式。
NIO优点 :NIO 是可以做到用一个线程来处理多个操作的。假设有 1000 个请求过来,根据实际情况,可以分配20 或者 80个线程来处理。不像之前的阻塞 IO 那样,非得分配 1000 个。。
NIO缺点 : 技术实现复杂度高,增加维护成本。
NIO适用场景 :适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,弹幕系统,服务器间通讯等
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频**
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-AtWvSuYj-1710847278737)]