BIO、NIO、AIO 的区别

Java面试题

BIO

阻塞IO。一个连接一个线程,当服务端接受到多个客户端的请求时,客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销

NIO

同步非阻塞IO 。一个线程处理多个连接。NIO 包含 Channel(通道)、Selector(选择器)、Buffer (缓冲区)三个核心组件。NIO是面向缓冲区的,所有的数据都是在Buffer 缓冲区里。Channel是一个通道,可以通过他读取或写入数据,通道和流的不同是,通道是双向的,而流只能朝着一个方向移动。Selector选择器通过轮询来监听多个Channel通道,如此实现一个线程管理多个连接。

适用场景:连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,弹幕系统,服务器间通讯等。

使用案例:Jetty、Dubbo、Zookeeper等都是基于NIO实现。

AIO

异步非阻塞IO。一个有效请求一个线程。流的读写都是异步执行,当流读取或写入完毕后,操作系统通知服务器启动线程进行处理。

适用场景:连接数目多且连接比较长的架构,比如相册服务器,充分调用 OS 参与并发操作

相关推荐
刀法如飞14 小时前
一款开箱即用的Spring Boot 4 DDD工程脚手架
java·后端·架构
一嘴一个橘子14 小时前
spring-aop 的 基础使用 -3 - 切点表达式 的提取、复用
java
Re_zero14 小时前
Java新手避坑:为什么我劝你放弃 scanner.nextInt()?
java
Good_Starry15 小时前
Java——反射
java
又是忙碌的一天15 小时前
SpringBoot 创建及登录、拦截器
java·spring boot·后端
fox_mt15 小时前
AI Coding - ClaudeCode使用指南
java·ai编程
毕设源码-郭学长16 小时前
【开题答辩全过程】以 基于SSM的高校运动会管理系统的设计与实现为例,包含答辩的问题和答案
java·eclipse
qq_54702617916 小时前
Maven 使用指南
java·maven
xiaolyuh12316 小时前
Arthas修改类(如加日志)的实现原理
java
栗子叶16 小时前
Java对象创建的过程
java·开发语言·jvm