BIO,NIO,AIO介绍

BIO、NIO、AIO 介绍和适用场景分析 机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为Java工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。请转发本文支持一下。 阅读详情

1. BIO(同步 , 阻塞)
BIO是Java1.4之前所使用的一个 同步并阻塞形 IO , 原因是 Socket是阻塞的, 从serverSocket的accept就开始阻塞 ,到 read方法也是阻塞的 .

改进方式:
1.使用while循环解决 客户端多请求问题
2.使用多线程解决 客户端并发问题
可以使用线程池来实现解决并发问题 但是有很大的局限性:1. 得确切的知道客户端的请求数量从而构造多少条线程. 2. 如果请求数量过多 则会导致cup 大量的资源耗费在线程的切换中.
2. NIO(同步, 非阻塞)

图解:
在这里插入图片描述

1:客户端通过ip和端口找到服务器端,操作系统内核先处理
2:操作系统内核通知Selector,有客户端请求连接
3:Selector向内核注册连接建立的监听
4:内核发现有人能处理这个连接,于是开始和客户端建立连接
5:连接成功,通知Selector,同时创建channel
6:客户端发送数据,放入缓冲区。
7:Channel 不会直接处理字节数据,而是通过 Buffer 对象来处理数据
8:Selector会不断 轮询注册在其上的 Channel,如果某个 Channel 上面发生读或者写事件,这个 Channel 就处于就绪状态,会被 Selector 轮询出来,进行后续的 I/O 操作
小结:
1:nio模式中整个过程服务器都没有被阻塞
2:bio是傻傻地等待客户端来连,而nio不等,有连接来了告诉我。所以nio能一次性处理多个客户端请求,一个客户端对应一个channel
3:bio是傻傻等待客户端发数据,而nio不等,通过轮询感知channel是否有数据流。
名词解释
NIO 三大核心部分:Channel(通道),Buffer(缓冲区), Selector(选择器)。

Buffer :容器对象,包含一些要写入或者读出的数据。在 NIO 库,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的;在写入数据时,也是写入到缓冲区中。任何时候访问 NIO 中的数据,都是通过缓冲区进行操作。

Channel :通道对象,对数据的读取和写入要通过 Channel,它就像水管一样。通道不同于流的地方就是通道是双向的,可以用于读、写和同时读写操作。Channel 不会直接处理字节数据,而是通过 Buffer 对象来处理数据。

Selector: :多路复用器,选择器。提供选择已经就绪的任务的能力。Selector会不断 轮询注册在其上的 Channel,如果某个 Channel 上面发生读或者写事件,这个 Channel 就处于就绪状态,会被 Selector 轮询出来,进行后续的 I/O 操作。这样服务器只需要一两个线程就可以进行多客户端通信。
3. AIO (异步, 非阻塞)

图解:

在这里插入图片描述
1:客户端通过ip和端口找到服务器端,操作系统内核先处理
2:操作系统内核通知Selector,有客户端请求连接
3:Selector向内核注册连接建立的监听
4:内核发现有人能处理这个连接,于是开始和客户端建立连接
5:连接成功,通知Selector,同时创建channel
6:Selector没有立马去读数据,而是注册读数据的监听
7:客户端发送数据,在内核中缓存。
8:内核通知Selector有数据流。
9:Selector通过channel读取数据。

BIO、NIO、AIO 介绍和适用场景分析(1) NIO的最重要的地方是当一个连接创建后,不需要对应一个线程,这个连接会被注册到多路复用器上,所以所有的连接只需要一个线程就能搞定,当这个线程中多路复用器进行轮询的时候,发现连接上有请求的话,才开启一个线程进行处理,也就是一个请求一个线程模式。在NIO的处理方式中,当一个请求来的时候,开启线程进行处理,可能会等待后端应用的资源(JDBC连接等),其实这个线程就被阻塞了,如果并发上来,还会有BIO一样的问题。HTTP/1.1出现后,有了Http长连接,这样除了超时和指明特定关闭的http header外,这个链 阅读详情

相关推荐

JDK中关于BIO,NIO,AIO,同步,异步介绍

本文原创地址,我的博客:https://jsbintask.cn/2019/04/16/essay/nio/(食用效果最佳),转载请注明出处! 在理解什么是BIO,NIO,AIO之前,我们首先需要了解什么是同步,异步,阻塞,非阻塞。假如我们现在要去银行取钱: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写); 异步 : 委托一小弟拿银行卡到银行取钱,然后...

jsbintask的博客 522

netty学习笔记06——NIO三大组件的关系

netty学习笔记06——NIO三大组件的关系 每个channel都会对应一个buffer selector对应一个线程,一个线程对应要给channel(连接、socket) 程序切换到哪个channel是由事件决定的 selector会根据不同的事件,在各个通道上切换 buffer就是一个内存块,底层是有一个数组 数据的读取写入是通过Buffer,这个和BIO有本质不同的。bio是面向流的,流有输入输出,不能双向。buffer可以读也可以写 channel也是双向的 ...

qq_22343953的博客 279

Netty BIO/NIO/AIO介绍

1、 BIO(blocking I/O):同步阻塞IO,也即是传统的I/O。2、 NIO (non-blocking IO): 也即是New I/O,使用它可以提供非阻塞式的高伸缩性网络。3、AIO 即 NIO2.0, 叫做异步不阻塞的 IO。AIO 引入异步通道的概念, 采用了 Proactor 模式, 简化了程序编写,有效的请求才启动线程, 它的特点是先由操作系统完成后才通知服务端程序启动线程去处理, 一般适用于连接。

艾利克斯冰的博客 519

netty学习笔记04——初识NIO

文章目录netty学习笔记04——初识NIO netty学习笔记04——初识NIO NIOTimeServer: public class NIOTimeServer { public static void main(String[] args){ int port = 8080; if(args!=null && args.length > 0 ){ tr...

qq_22343953的博客 243

FoundationPose复现及Realsense应用

FoundationPose是一个统一的基础模型,用于6D对象姿态估计和跟踪,支持基于模型和无模型的设置。在测试时可以立即应用于未见过的新对象,无需微调,只要给出其CAD模型,或者捕获少量RGBD参考图像。得益于统一框架,下游姿态估计模块在两种3D模型设置中都是相同的,当没有CAD模型时,使用神经隐式表示进行高效的新视角合成。通过大规模合成训练,辅以大型语言模型(LLM)、一种基于transformer的新架构和对比学习公式,实现了强大的泛化能力。

m0_56661101的博客 1万+

VS2019集成AddressSanitizer:C++内存错误检测实战指南

在C++开发中,内存管理是核心挑战之一,涉及堆、栈和全局变量的分配与释放。其原理在于程序运行时对内存地址的访问必须严格遵循分配边界和生命周期规则,否则会导致缓冲区溢出、释放后使用等严重错误。这类问题的技术价值在于直接影响程序的稳定性、安全性和性能,是高质量软件必须攻克的基础难题。应用场景广泛,从嵌入式系统到大型服务器软件,都需要可靠的内存错误检测机制。AddressSanitizer(ASan)作为一种编译时插桩技术,通过影子内存和运行时检查,能精准定位堆缓冲区溢出、释放后使用等隐蔽错误。本文以Visual

weixin_34356310的博客 279

BIO、NIO、AIO介绍与区别

BIO、NIO、AIO介绍与区别 阻塞与非阻塞 主要是指访问IO的线程是否会阻塞 线程访问资源,该资源是否准备就绪的一种处理方式。 同步与异步 主要是指数据的请求方式 同步和异步是指访问数据的一种机制 BIO 同步阻塞 IO,Block IO IO 操作时会阻塞线程,并发处理能力低。 我们熟知的 Socket 编程就是 BIO,一个 socket 连接一个处理线程(这个线程负责这个 Socke...

jl935418600的博客 293

cesium自定义指南针

项目需要一个指南针,用鼠标按住旋转指针,会让3d地图旋转,点击中心点重置方位。当然可以使用插件cesium-navigation-es6,但是样式不好修改,所以我自定义了一个指南针。

weixin_47017648的博客 750

Java IO模型BIO、NIO、AIO介绍

Java BlO就是传统的Java IO编程,其相关的类和接口在Java.io 包中BIO(blocking I/O)同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器).

liuhenghui5201的专栏 1487

混合动作空间在强化学习中的创新应用:PDQN与MPDQN算法解析

本文深入解析了强化学习中处理混合动作空间的PDQN与MPDQN算法。针对既有离散选择又有连续调节的复杂决策场景,PDQN通过参数化深度Q网络,巧妙结合DQN与DDPG进行交替优化;MPDQN则进一步改进,为每个离散动作提供专属参数评估以减少干扰。文章通过游戏、自动驾驶等实例阐述了其应用价值与面临的挑战。

efc123456的博客 861

QMI8658姿态传感器实战:从校准到自检的完整避坑指南

本文详细解析了QMI8658姿态传感器的校准与自检流程,提供了从硬件环境搭建到高级功能开发的完整避坑指南。通过真实案例揭示电源设计、接口优化、温度补偿等关键细节,帮助开发者提升传感器精度和可靠性,适用于工业级应用场景。

weixin_29184075的博客 455

BIO、NIO 和 AIO 基础介绍

BIO:同步阻塞 I/O(Blocking I/O)NIO:同步非阻塞 I/O(Non-blocking I/O),也叫 New I/O,核心是「多路复用」AIO:异步非阻塞 I/O(Asynchronous I/O),也叫 NIO 2.0。

qq_38261626的博客 679

基于人脸识别的课堂考勤系统 tkinter+openpyxl+face_recognition

基于face_recognition库实现人脸考勤系统功能。利用Python的tkinter模块来设计考勤系统的图形化界面,此外结合openpyxl模块,实现将学生的信息和考勤打卡数据保存到表格中,方便查看和调用。该系统具备“刷脸打卡”、“新学生注册”等功能。............

lyx4949的博客 6965

java aio bio nio性能_Java-IO(上) BIO、NIO、AIO介绍

在开始之前这个系列的概要这个系列主要是讲Java-IO,分为上中下三篇。上篇主要是介绍Java原生的BIO(IO),NIO,AIO(NIO2)中篇主要是介绍经典的IO框架Netty的基本概念,以及线程模型下篇则是讲Netty的项目实践,如何用Netty实现一套RPC框架关于源码在介绍Java原生IO,以及Netty框架的时候,我都会以一个简单的HttpServer作为Demo。所以在本系列中会包含...

weixin_39522103的博客 193

python基础之语言发展历史

博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏。 目录一、前言二、发展历史1、Python是一种面向对象的解释型编程语言2、Python常被称为胶水语言3、Python由Guido开发4、Python连续多年入选编程语言TOP105、Python的发展历史三、总结 一、前言   由于Python语言的简洁性、易读性以及可扩展性,它在网络爬虫、数据分析、.

jiankang66的博客 3348

DXF转G代码是圆弧的方向如何确定?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1185

BIO、NIO、AIO介绍

I/O 模型基本说明 I/O 模型:就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收,很大程度上决定了程序通信的性能,Java 共支持 3 种网络编程的/IO 模型:BIO、NIO、AIO 实际通信需求下,要根据不同的业务场景和性能需求决定选择不同的I/O模型 I/O模型 Java BIO 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销 Java NIO Java NIO : 同

hahayixiao1的博客 220

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java IO模型介绍:BIO、NIO、AIO

I/O模型 I/O模型基本说明 I/O模型的简单理解:就是用什么样的通道进行数据的发送和接受,很大程度上决定了程序通信的性能; Java共支持三种网络编程I/O模型:BIO、NIO、AIO; Java BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销; Java NIO:同步非阻塞,服务端实现模式为一个线程处理多个请求,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接的I/O请求就

NullPointerException的博客 614

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

BIO、NIO、AIO介绍和实现案例

快速了解BIO NIO AIO知识以及使用

DU9999999的博客 2112

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【Java基础】BIO/NIO/AIO的详细介绍与比较区分

BIO适用于连接数较少的场景 NIO适用于连接数目多且连接时间较短的架构,比如聊天服务器· AIO适用于连接数目多且连接时间较长的架构,比如相册服务器

weixin_45873353的博客 1823

BIO,NIO,AIO整理(全称,介绍,区别)

先来个例子理解一下概念,以银行取款为例: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API)。 阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一...

Honins的博客 852

Netty(一)- Netty与BIO、NIO、AIO介绍

Netty(一)- Netty与BIO、NIO、AIO介绍

及时当勉励,岁月不待人 2634
上一篇: dubbo介绍
下一篇: 数据结构
HelloWorld_AA
博客等级 码龄9年 18粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值