欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot
BIO NIO AIO#
Copy
BIO,同步阻塞式IO,简单理解:一个连接一个线程
NIO,同步非阻塞IO,简单理解:一个请求一个线程
AIO,异步非阻塞IO,简单理解:一个有效请求一个线程
BIO(同步阻塞)#
Copy
在JDK1.4之前,用Java编写网络请求,都是建立一个ServerSocket
客户端建立Socket时就会询问是否有线程可以处理,如果没有,要么等待,要么被拒绝。
即:一个连接,要求Server对应一个处理线程。
NIO(同步非阻塞)#
Copy
在Java里的由来,在JDK1.4及以后版本中提供了一套API来专门操作非阻塞I/O,我们可以在java.nio包及其子包中找到相关的类和接口。
这套API由三个主要的部分组成:
缓冲区(Buffers)、通道(Channels)和非阻塞I/O的核心类组成。
NIO本身是基于事件驱动思想来完成的,其主要想解决的是BIO的大并发问题:
在使用同步I/O的网络应用中,如果要同时处理多个客户端请求,或是在客户端要同时和多个服务器进行通讯,就必须使用多线程来处理。
也就是说,将每一个客户端请求分配给一个线程来单独处理。
这样做虽然可以达到我们的要求,但同时又会带来另外一个问题:
由于每创建一个线程,就要为这个线程分配一定的内存空间(也叫工作存储器),而且操作系统本身也对线程的总数有一定的限制。
如果客户端的请求过多,服务端程序可能会因为不堪重负而拒绝客户端的请求,甚至服务器可能会因此而瘫痪。
NIO(同步非阻塞):
服务器实现模式为一个请求一个线程,
即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
AIO(异步非阻塞)#
Copy
与NIO不同,当进行读写操作时,只须直接调用API的read或write方法即可。
这两种方法均为异步的:
对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序
对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。
即可以理解为,read/write方法都是异步的,完成后会主动调用回调函数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构