java中的BIO、NIO、AIO

JAVA IO、BIO、NIO、AIO及零拷贝 阅读详情

问:java 中的BIO NIO AIO 是什么?
答: BIO NIO 和AIO 都是java中的IO 模型

BIO

BIO(Blocking IO) 也叫同步阻塞I/O 是传统的IO模型,它在读写数据时会阻塞线程,即当应用程序调用I/O操作时,该操作一直阻塞线程直到操作完成 ,直到数据读写完成,适用于并发不高,连接数较小的场景,如单线程的服务器模型

NIO

NIO Non-blocking I/O 同步非阻塞I/O java中新的I/O模型, 它在读写数据时不会阻塞线程,而是通过轮询的方式检查是否有数据可读写,适用于并发量较高的场景
它的核心是Selector 和Channel ,利用Selector监听多个Channel上的事件,当一个Channel 上的事件到达时,它会被Selector转发给注册在这个Selector上的其他Channel,这样可以用一个线程处理多个请求,提高了I/O效率,NIO适用于连接数多、链接时间段的场景,例如实时聊天,在线游戏等

在java中的springboot 内嵌的tomcat 默认采用的就是NIO 这种模型
核心类:Http11Processor Http11NioProtocol NioEndpoint

LimitLatch: 连接控制器
Acceptor: 负责接收链接
Poller: 负责轮询PollerEvent队列,默认1个线程执行,将就绪的事件生成SocketProcessor 交给Executor(Tomcat 实现的ThreadPoolExecutor 内部的Executor) 去执行
SocketProcessor: 相当于是Workder 判断Socket握手状态和SocketEvent状态,对Socket执行读写操作,是真正的Request 和Response处理类(发起类)
Executor: Tomcat实现的ThreadPoolExecutor 工作线程池。核心线程数默认10, 最大线程数默认200, 线程存活时间60s, 使用链表阻塞队列,自定义的线程工作

AbstractEndpoint.java 中的
NioEndpoint  extends AbstractEndpoint 
// 创建内部的线程池
public void createExecutor() {
	// 是否使用内部线程池
	internalExecutor = true;
	// 创建任务队列
	TaskQueue taskqueue = new TaskQueue();
	TaskThreadFactory tf = new TaskThreadFactory(getName()+"-exec-",daemon,getThreadPriority());
	// coreThreads 10 maxThreads 200 keepAliveTime 最大空闲时间 60s
	executor = new ThreadPoolExecutor(getMinSpareThreads(),getMaxThreads(),60,TimeUnit.SECONDS,tasqueue,tf);
	taskqueue.setParent((ThreadPoolExecutor) executor);
}

Executor 中的线程,执行SocketProcessor 的逻辑,从Socket 中读取HTTP Request,然后解析成HttpServletRequest 对象,再分派到相应的Servlet完成逻辑,最后将Response 通过Socket发回给客户端
从Socket中读和写数据,不是在NIO 模式下注册读和写事件到Selector复用器上,而是直接通过Socket来完成读写的,这个过程是阻塞的。 此处还稍微有点不太理解

附图tomcat 内部NIO模型一张
在这里插入图片描述

AIO

AIO (Asynchronous IO) 是jdk7引入I/O模型
异步非阻塞IO,它的特点是异步处理I/O操作,
当操作完成时会通知应用程序,相比于NIO的同步非阻塞IO,AIO在读写操作时不需要像NIO一样一直轮询,而是通过回调函数的方式在数据准备好后通知应用程序进行数据的读取,可以更加高效的利用系统资源,提高吞吐量,从而提高了IO的效率
但是AIO 在处理小文件和小数据量时的性能不如NIO
所以AIO适用于高并发且处理较大数据量,连接数多,链接时间长的场景, 例如HTTP长链接,文件操作等

Java的 BIO,NIO,AIO 总结 熟练掌握 BIO,NIO,AIO 的基本概念以及一些常见问题是你准备面试的过程中不可或缺的一部分,另外这些知识点也是你学习 Netty 的基础。 一、同步异步与阻塞非阻塞 Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。 在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。 . 阅读详情

相关推荐

LVGL字体优化实战:如何将中文字库放到外部SPI Flash并动态加载(节省内部RAM)

本文详细介绍了LVGL在嵌入式UI开发中如何通过外部SPI Flash存储中文字库并动态加载,以节省内部RAM资源。通过对比不同存储介质和字库格式,提供多种实现方案及性能优化技巧,帮助开发者在资源受限设备上实现高效的中文显示。

weixin_28693683的博客 346

Java面试常考的 BIO,NIO,AIO 总结

文章转载自:JavaGuide 目录: 1. BIO (Blocking I/O) 1.1 传统 BIO 1.2 伪异步 IO 1.3 代码示例 1.4 总结 2. NIO (New I/O) 2.1 NIO 简介 2.2 NIO的特性/NIO与IO区别 1)Non-block...

小树的博客 13万+

python 识别滑块验证码

博客来源于: https://www.cnblogs.com/wyh0923/p/16528354.html # -*- coding: utf-8 -*- # https://gov.pkulaw.cn/ 1. import io 2. import json 3. from pathlib import Path 4. from PIL import Image 5. import bas...

2102

详解Java中的BIO、NIO、AIO

IO流是Java中比较难理解的一个知识点,但是IO流在实际的开发场景中经常会使用到,比如Dubbo底层就是NIO进行通讯

Java鱼仔的博客 4274

学习笔记9--智能驾驶的功能安全设计之功能安全设计

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》。此专栏是关于《自动驾驶系统设计及应用》书籍的笔记.

FUXI_Willard 1795

深入解析基于Fluent的蒸发冷凝相变UDF程序及其在重力热管液体蒸发冷凝变化计算中的应用

ANSYS Fluent是一款功能强大的CFD软件,广泛应用于流体流动、传热、化学反应和多相流等领域的数值模拟。Fluent提供了丰富的物理模型和求解器,支持用户自定义函数(UDF)以扩展其功能,实现更为复杂和特定的模拟需求。UDF是用C语言编写的程序,允许用户在Fluent中自定义物理模型、边界条件、源项等,以实现特定的模拟需求。在处理复杂的相变过程、非均匀物性参数或特定的热传导机制时,UDF提供了极大的灵活性和扩展性。

qq_38334677的博客 1265

Java IO 模型之 BIO、NIO、AIO 详解

在 Java 编程中,IO(Input/Output)操作是非常常见的操作,它涉及到文件读写、网络通信等方面。Java 提供了各种类来支持这些操作。本文将从 IO 的基础知识讲起,逐步深入,介绍 Java IO 的各个方面。Java IO(Input/Output)是 Java 语言中用于读写数据的 API,它提供了一系列类和接口,用于读取和写入各种类型的数据。

流华追梦的专栏 2117

AI上推荐 之 AutoRec与Deep Crossing模型(改变神经网络的复杂程度)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 5667

Java之IO,BIO,NIO,AIO知多少?

开心一笑【一女人:“我真不放心丈夫,他准备到湖中心水最深的地方把猫扔掉。”邻居:“那有什么不放心的?”女人:“猫已回家一钟头了!”】提出问题Java之IO,BIO,NIO,AIO知多少???解决问题前言本篇文章参考了网上很多大神的文章,包括一些代码实例。在文章最后都有写明出处。如果文章有写错的地方,欢迎留下评论。本篇文章是我录制视频《Java之IO,BIO,NIO,AIO知多少?》的讲课稿子。下面是

IT技术分享 2万+

YOLO26改进策略【Neck】| arXiv 2025 分层多头注意力HMHA 子空间拆分提多样 + 通道重排降冗余,强化目标检测精度

HMHA(Hierarchical Multi-Head Attention,分层多头注意力)旨在解决传统多头注意力(MHA)在图像恢复任务中的核心缺陷——特征冗余。传统MHA将通道均匀拆分给各个头,导致不同头学习的子空间信息相似,进而出现多头关注同一区域、忽略退化区域修复的问题,限制了模型的特征表达能力。HMHA通过“分层子空间拆分+通道重排序”策略,让每个头学习差异化、互补的上下文特征,从根源上缓解冗余,提升图像恢复任务中对复杂退化场景的特征捕捉能力。

Limiiiing的博客 212

STM32串口控制LED灯的亮灭

STM32中的串口控制LED灯的亮灭,分为两种方式,一种是直接发送数字0和1来控制灯的亮灭,另一种是通过发送字符串来控制。 我所使用的开发板主控芯片是STM32F401RET6,主频84MHz, 首先要进行串口的初始化: /* 函数功能:串口的初始化 函数名:Usart_Init 返回值:无 参数:u32 brr 备注: USART1_TXD->PA9 USART1_RXD->PA10 */ void Usart_Init(u32 brr) { float div; u16 div

博客 2万+

Java中BIO、NIO、AIO详解

一、Java中IO模型简介 在Java中,主要有三种IO模型,分别是: 同步阻塞IO(BIO) 同步非阻塞IO(NIO) 异步IO(AIO) 两个概念: 同步与异步 同步:同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。 异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机...

JSai的博客 4048

【Python机器学习】主成分分析(PCA):高维数据的“瘦身术“

主成分分析(PCA)的历史可以追溯到1901年,当时Karl Pearson首次提出了这个概念。在计算机还不存在的年代,PCA是一个纯粹的数学构想,用来简化多变量数据的分析。几十年后,当计算机出现时,PCA成为了数据分析中最早实现的算法之一。从那时起,超过一个世纪的发展中,PCA一直保持着其核心的理论框架和实用价值,这本身就是对这个方法深刻科学性的证明。在现代深度学习时代,许多人可能会认为PCA已经过时了。但事实恰好相反。

nmdbbzcl的博客 981

java BIO/NIO/AIO

BIO->NIO->AIO的转变历程传统BIO的问题在于高并发时的线程开销,而NIO通过多路复用减少了线程数量,提高了并发能力。但NIO的编程模型复杂,需要处理事件循环、缓冲区管理等。AIO则进一步简化,利用操作系统的异步支持,实现真正的非阻塞,但可能在某些系统上支持不够好,比如Linux的AIO实现不如Windows成熟,所以Netty还是基于NIO。

Leaf吧的博客 1297

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java中的三种IO(BIO、NIO、AIO)

IO 阻塞和非阻塞主要指的是访问 IO 的线程是否会阻塞(或者说是等待) 线程访问资源,该资源是否准备就绪的一种处理方式 BIO(传统的IO) BIO是同步阻塞式的IO,以流的方式处理数据(效率低) Socket编程就是BIO,一个socket连接处理一个线程。当多个socket请求与服务端建立连接时,服务端不能提供相应数量的处理线程,没有分配到处理线程的连接自然就会阻塞或者是被拒绝了。 ...

未来可期的博客 5713

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【关于Java的BIO、NIO、AIO】

本文深入浅出地讲解了Java三大IO模型:BIO、NIO和AIO。通过餐馆服务员的生动比喻,解析了阻塞式IO(BIO)"一连接一线程"的低效问题,非阻塞IO(NIO)基于Selector多路复用的高效机制,以及异步IO(AIO)回调通知的先进理念。文章详细对比了三者的核心特点、编程方式和适用场景,指出NIO是当前高并发系统的主流选择(如Netty框架),并提供了面试高频问题的专业解答。最后强调IO模型的演进体现了系统性能优化的核心思想,掌握这些原理对开发高性能服务至关重要。

weixin_64178283的博客 1050

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

一文了解Java的BIO, NIO和AIO模型

NIO全称为非阻塞 I/O(Non-blocking I/O),从 Java 1.4 开始引入。它采用了多路复用(Selector)机制,允许通过单个线程处理多个客户端连接,使用事件驱动的方式处理 I/O 操作。NIO 的核心组件包括Channel(通道)Selector(选择器)和Buffer(缓冲区)。Selector监听多个Channel事件(如连接、读取、写入等),通过单个线程轮询并处理就绪的 I/O 事件。Channel和传统的Socket。

智的博客 1654

Java 网络 IO(BIO、NIO、AIO)

NIO提供的MappedByteBuffer支持支持在内存(堆外内存)中修改文件,可以减少一次数据拷贝。代码示例/*** 说明 1.MappedByteBuffer 可让文件直接在内存(堆外内存)修改,操作系统不需要拷贝一次*///获取对应的通道/*** 参数 1:FileChannel.MapMode.READ_WRITE 使用的读写模式* 参数 2:0:可以直接修改的起始位置* 参数 3:5: 是映射到内存的大小(不是索引位置),即将 1.txt 的多少个字节映射到内存。

沈小洋 3096

java IO 与 BIO、NIO、AIO

标准IO(基于流):传统的IO操作,基于字节流和字符流,通过ReaderWriter等类进行数据的读写。:阻塞式IO,每个请求对应一个线程,适用于连接数较少的场景。:非阻塞IO,通过通道(Channel)和缓冲区(Buffer)实现,适用于高并发场景。:异步IO,通过回调机制实现,允许操作系统通知应用程序IO操作的完成。Java提供了多种IO模型,以满足不同应用场景的需求。

liu_rockefeller的博客 1012

JAVA的BIO,NIO,AIO

一:名词解释 NIO nio 是 java New IO 的简称,在 jdk1.4 里提供的新 api 。 Sun 官方标榜的特性如下: – 为所有的原始类型提供 (Buffer) 缓存支持。 – 字符集编码解码解决方案。 – Channel :一个新的原始 I/O 抽象。 – 支持锁和内存映射文件的文件访问接口。 – 提供多路 (non-bloking) 非阻塞式的高伸缩性网络 I

janvinal的专栏 1107

Java的BIO/NIO/AIO

每个客户端连连接本质上对应着一个Channel通道,每个通道都有自己的Buffer缓冲区来进行读写,这些Channel被Selector选择器管理调度Selector负责轮询所有已注册的Channel,监听到有事件发生,才提交给服务端线程处理,服务端线程不需要做任何阻塞等待,直接在Buffer里处理Channel事件的数据即可,处理完马上结束,或返回线程池供其他客户端事件继续使用。更好的性能:减少了线程数目,降低了系统对资源的需求,同时也减少了线程上下文切换的开销,这对于高性能服务器应用是非常重要的。

weixin_43993064的博客 1213

Java的IO模型详解-BIO,NIO,AIO

Java IO模型,bio, nio以及不常用的aio

wendao76的专栏 2110

Java IO 与 BIO、NIO、AIO 详解

在 Java 中,I/O(输入/输出)操作是与外部系统(如文件、网络等)进行数据交换的基础。Java 提供了多种 I/O 机制,包括传统的阻塞式 I/O(BIO)、非阻塞式 I/O(NIO)和异步 I/O(AIO)。本文将详细探讨这三种 I/O 模型的特点、区别及其适用场景。

专注Java和MySQL领域知识分享 1358

Java中的I/O模型——BIO、NIO、AIO

BIO:每个连接一个线程,适用于低并发、小规模应用。NIO:多路复用、非阻塞,适合高并发场景。AIO:完全异步,回调机制适合高并发、长连接场景。

m0_53926113的博客 1491

Java 基础篇:BIO、NIO、AIO

在 Java 网络编程和 IO 操作中,和是三种不同的 IO 模型。它们的核心区别在于数据的读写方式和线程管理方式,适用于不同的应用场景。本文将详细讲解 BIO、NIO、AIO 的原理、使用方法以及它们之间的对比,帮助开发者理解Java IO 的发展演进。

x² 1096

Java IO框架之BIO、NIO、AIO

I/O 模型简单理解为:就是使用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。Java 支持 3 种网络编程模型:BIO、NIO、AIO。

在路上 1896
上一篇: Redis工作原理与机制
xiaolong_java
博客等级 码龄12年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值