BIO、NIO、AIO 的区别

Java面试题

BIO

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

NIO

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

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

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

AIO

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

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

相关推荐
V+zmm101343 分钟前
机电公司管理信息系统小程序+论文源码调试讲解
java·数据库·微信小程序·小程序·毕业设计
LuXi_foryou5 分钟前
Cannot resolve symbol ‘view‘ Androidstudio报错解决办法
android·java·android studio
架构文摘JGWZ1 小时前
不用 Tomcat?SpringBoot 项目用啥代替?
java·spring boot·tomcat
网安墨雨2 小时前
网络安全之命令
java·运维·web安全
sd21315122 小时前
springboot3 spring security+jwt实现接口权限验证实现
java·后端·spring
张国荣家的弟弟2 小时前
【Yonghong 企业日常问题07 】 东方通TongWeb替代Tomcat的实战指南!
java·tomcat
局外人_Jia2 小时前
Tomcat 新手入门指南
java·tomcat
Dreamboat-L2 小时前
手写Tomcat
java·tomcat
出门撞大运2 小时前
手写一个简易版的tomcat
java·tomcat
A阳俊yi2 小时前
SpringMVC中有关请求参数的问题(映射路径,传递不同的参数)
java·前端·javascript