面试官: 说说你对NIO、BIO的理解?

从按键开机到I2C隔离:手把手拆解一个智能硬件项目里的MOS管实战配置 本文详细解析了智能硬件项目中MOS管的实战配置,从按键开机电路到I2C总线隔离,全面覆盖电源管理和信号隔离的关键技术。通过PMOS+NMOS组合方案实现可靠的开机功能,并采用双NMOS方案优化I2C通信隔离,提升系统稳定性和信号质量。 阅读详情

1. BIO、NIO

BIO

传统的java.io包,同步、阻塞。服务器实现模式为一个连接一个线程,服务器端为每一个客户端的连接请求都需要启动一个线程进行处理。

NIO

JDK1.4引入的java.nio包,采用多路复用技术,同步非阻塞。服务器实现模式为客户端的连接请求都会注册到多路复用器上,用同一个线程接收所有连接请求。

2、基本概念解析

阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式。

同步

应用程序要直接参与IO读写的操作

异步

所有的IO读写操作都交给了操作系统,这个时候我们可以去做另外的事情。

读写事件交给一个单独的线程来处理则为多路复用技术
比如有十个IO操作同时请求,这十个请求交给一个单独线程接收,由这个单独线程轮询遍历每一个IO操作进行处理。

3、原理图


这是客户端与服务器之间NIO的处理方式,每个客户端与服务器端每次进行IO操作的时候,服务器都首先会创建一个端口进行该次操作,就相当于创建出一条公路进行传输工作,接着服务器会为每一个客户端分配一个单独的线程进行IO传输,传输完需要销毁该端口。并且每次只创建了一个端口,客户端如果有多个IO操作,需要等待上一个IO操作后才能继续进行,因此是一个阻塞过程。


当客户端过多时,服务端不断的创建端口(公路)进行IO操作,并且服务端创建了多个线程去处理IO操作,此时则会有性能的问题出现。


NIO则采用了多路复用技术,并且每一个客户端的每一个IO操作都会由同一个线程进行接收,然后再由这个线程进行一个轮询遍历创建另外的线程对每一个IO操作进行处理。因为使用了多路复用技术,所以该技术是一个非阻塞的过程。

结语

小编是一枚Java Coder,业余写文章,现主营微信公众号《Java患者》,喜欢的话关注我的公众号或者加我微信我们一起学习Java


Tessent ATPG进阶:解锁多种Fault Model的工程实践与选型指南 本文深入探讨Tessent ATPG中多种Fault Model的工程实践与选型策略,涵盖Stuck-at、Transition、Bridge等核心模型的应用场景与配置技巧。通过实际案例解析,展示如何组合不同Fault Model提升芯片测试覆盖率,特别针对汽车电子、超低功耗芯片等复杂场景提供专业解决方案。 阅读详情

相关推荐

(二)目标检测之 HOG+SVM 算法

文章目录一、概述二、方法概述三、积分图四、AdaBoost五、级联检测六、结果七、复现八、总结参考资料 一、概述   梯度直方图HOG(Histogram of Oriented Gradients)是法国人Dalal在2005年CVPR会议上提出的特征提取算法,并将其与 SVM 配合,用于行人检测。论文地址:Histograms of oriented gradients for human detection HOG有个优点,提取的边缘和梯度特征能很好的抓住局部形状的特点,且因是对图像做了Gamma

天青如水的博客 1万+

第五阶段学习测试

逐梦

逐梦 3892

三款云电脑实测:ToDesk、青椒云、顺网云谁更适合AIGC新手?附详细配置对比

本文针对AIGC新手,深度实测了ToDesk云电脑、青椒云和顺网云三款云电脑服务。通过对比上手门槛、内置生态、操作引导及成本,发现ToDesk云电脑凭借一键启动、丰富预置模型和直观引导,为新手提供了最接近“开箱即用”的零门槛AIGC创作体验,是快速入门AI绘画的高效选择。

assembly8low的博客 1094

NIO、AIO、BIO的区别(通俗理解)

BIO(同步阻塞) 服务端需要对客户端的每个请求处理完成后 才会继续接受客户端的请求 客户端也会等待服务端处理完请求后才会发送请求 通常会使用多线程去处理 因为BIO每个连接一个单独的线程 NIO(同步非阻塞) NIO使用单线程或者只使用少量的多线程,一个请求一个线程,多个连接共用一个线程。 (即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。) (可以使用资源池或者队列等手段实现异步的处理) AIO(异步非阻塞) AIO的读写方法都是异步的 完成后会主

原罪的博客 8921

MDK开发篇:基于立创逻辑派FPGA-G1与Cortex-M1软核的按键控制LED实战

本文详细介绍了基于立创逻辑派FPGA-G1开发板与高云Cortex-M1软核的完整开发流程。通过Gowin云源软件配置软核系统与GPIO外设,并在Keil MDK环境中编写按键控制LED的C程序,最终实现程序固化与上电自启动。教程涵盖硬件配置、软件开发、在线调试与固化部署全步骤,帮助STM32开发者快速上手FPGA软核开发。

weixin_42103128的博客 147

从Xilinx FPGA到MIPI DSI LCD屏:手撸代码的实战经验分享

本文分享了使用Xilinx FPGA驱动MIPI DSI LCD屏的实战经验。作者从依赖官方IP核失败,到与底层D-PHY IP缠斗,最终通过手撸代码,直接配置GTY收发器原语并实现完整的D-PHY与DSI协议栈,成功点亮屏幕。文章详细剖析了协议细节、Vivado工具链的调试技巧与避坑指南,为FPGA工程师提供了从理论到实践的宝贵参考。

weixin_29188997的博客 399

nio和bio的原理_BIO、NIO、AIO 区别(绝对通俗易懂)

很多初学者对IO的各种形式的操作(如题)都有一个误区,仿佛总喜欢在其中分出个好坏,这其实是基础知识不充足的表现,至少对高并发和网络编程不熟悉,所以我先建议至少在熟悉了NIO后,再去了解这四个的差别。更不要复制粘贴别人的文章,这个东西其实需要有一点自己的想法。在本文中我将把自己理解的这几种io方式以最朴素的语言展现给大家,以及他们的优缺点和使用场景。更需要清楚的一点:都是为了更大的压榨CPU的利用价...

weixin_39981185的博客 336

网络攻防技术——MD5碰撞试验

一、题目 本次实验主要是加深大家对MD5碰撞及其原理的理解,使用SEED实验环境中的工具及编程语言,完成以下任务: a)使用md5collgen生成两个MD5值相同的文件,并利用bless十六进制编辑器查看输出的两个文件,描述你观察到的情况; b)参考Lab3_task2.c的代码,生成两个MD5值相同但输出不同的两个可执行文件。 c)参考Lab3_task3.c的代码,生成两个MD5值相同但代码行为不相同的可执行文件。 d)回答问题:通过上面的实验,请解释为什么可以做到不同行为的两个可执行文件具有相同的M

学习记录 3620

说说BIO,NIO,AIO区别(直接可用)

从客户端服务端连接角度看: BIO:同步并阻塞,线程发起 IO 请求,不管内核是否准备好 IO 操作,从发起请求起,线程一直阻塞,直到操作完成。服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。 NIO:同步非阻塞,客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求时才启动一个线程进行处理。服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复

weixin_43975276的博客 215

ZYNQ实战:手把手教你用AXI4-Full IP核打通PL与PS的DDR数据通道

本文提供了一份详细的ZYNQ实战指南,手把手教你创建并使用具备AXI4-Full Master接口的自定义IP核,实现PL(可编程逻辑)通过AXI HP接口直接读写PS(处理系统)的DDR内存。文章涵盖了从Vivado硬件设计、IP核配置、地址映射到Vitis软件验证的完整流程,并深入解析了数据一致性(禁用Cache)等关键要点,旨在帮助开发者掌握ZYNQ异构计算中高效数据搬运的核心技术。

weixin_29193359的博客 284

爆破shadow文件密码脚本(完成版)

由于添加了一个for循环,再稍作修改,让password not found!print(f"Trying password:")显示爆破的密码和过程。将代码中的password="123456"替换成下面代码。line.strip()函数首尾去空格。

m0_56578216的博客 771

从实践角度重新理解 BIO 和 NIO

扫描下方海报试读本文来源:http://blog.objectspace.cn/前言这段时间自己在看一些Java中BIO和NIO之类的东西,看了很多博客,发现各种关于...

石杉的架构笔记 421

【2025软考高级架构师】论文篇——4、论可靠性系统中软件容错技术的应用

软件容错技术对软件的稳定性起着至关重要的作用,尤其是针对互联网性质的软件并发高存在流量峰值等问题,软件容错技术的应用的重要性就不言而喻了。经过这次我所采用的软件容错技术的方法和措施的实施效果后,使我也看到了自己身上的不足之处,我会在今后的架构设计过程中,不断更新自己的知识,不断完善自己的架构设计领域,设计出更好的软件架构,更好的支撑业务平台的运行,提高公司的竞争力,为公司为社会尽一份绵薄之力。

qq837993702的博客 618

面试官:请说说你对BIO、NIO的理解

每天叫醒你的不是闹钟,而是姿势1BIO、NIO01BIO 传统的java.io包,同步、阻塞。服务器实现模式为一个连接一个线程,服务器端为每一个客户端的连接请求都需要启动一个线程进...

ZeJava的博客 268

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

大厂面试官:来说下对BIO、NIO、AIO的理解

System.out.println(new Date()+",接收数据:"+ body +",当前线程:"+Thread.currentThread().getName()+",线程id为:"+Thread.currentThread().getId());System.out.println("开始等待~"+"当前线程为:" + Thread.currentThread().getName() + Thread.currentThread().getId());在开始说IO之前,我们先要知道几个概念。

zjjcchina的博客 104

jre9下载 jdk9

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

面试官问我:如何理解BIO、NIO、AIO的区别?我差点拉胯!

很多文章在谈论到BIO、NIO、AIO的时候仅仅是抛出一堆定义,以及一些生动的例子。看似很好理解。但是并没有将最基础的本质原理显现出来,如果没有没有从IO的原理出发的话是很难理解这三者之间的区别的。所以本篇文章从Java是如何进行IO操作为开头进行分析。 Java中的IO原理 首先Java中的IO都是依赖操作系统内核进行的,我们程序中的IO读写其实调用的是操作系统内核中的read&write两大系统调用。 那内核是如何进行IO交互的呢? 1.网卡收到经过网线传来的网络数据,并将网络数据写到内存中.

p1830095583的博客 864

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

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

面试官:BIO、NIO、AIO 的区别是什么?

这是个网络编程的面试题:在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。自己的理解:也就是必须一件一件事做,等前一件做完了才能做下一件事 (提交请求->等待服务器处理->处理完返回 这个期间客户端浏览器不能干任何事 )官方:使用同步IO时,Java自己处理IO读写。

2401_85910670的博客 1146

BIO、NIO、AIO 的区别与实战应用解析

在 Java 后端开发中,I/O 模型直接关系到系统的并发能力和性能瓶颈。BIO、NIO、AIO 分别代表了 Java 不同阶段对 I/O 的抽象能力,是理解服务端性能优化、线程模型设计和异步编程的关键。是否理解不同 I/O 模型背后的原理差异;能否将模型应用在实际场景中(如:Tomcat、Netty、Spring Boot);对并发处理线程管理系统资源控制是否有深刻认知。模型阻塞性同步性多路复用API 难度应用场景BIO阻塞同步无简单小型系统、传统同步模型NIO。

残影的博客 1216

面试官:AIO、BIO 和 NIO 的区别是什么?

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。——理论很美好,现实很骨感。

weixin_44421461的博客 538

【关于Java的BIO、NIO、AIO】

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

weixin_64178283的博客 1049

BIO、NIO 和 AIO 的区别?

在 Java 后端开发中,I/O 操作(如网络通信、文件读写)是核心场景——小到接口调用,大到分布式中间件(如 Netty、Kafka),都依赖 I/O 模型的支撑。而 BIO、NIO、AIO 作为 Java 中三种主流 I/O 模型,直接决定了系统的并发能力、资源开销和响应速度。很多人初学时常混淆“同步/异步”“阻塞/非阻塞”,甚至觉得“NIO 就是异步”——其实三者的差异本质是“线程与 I/O 操作的协作方式”不同。这篇文章会用最通俗的方式,带你理清三者的核心逻辑。

埃泽漫笔 1126

谢飞机的Java面试奇遇:AIO、BIO、NIO与Netty深度解析

面试官:好了,今天的面试差不多了,你的表现还算不错,回去等通知吧。

wujie10的专栏 1922

面试官:BIO、NIO、AIO的区别

BIO、NIO、AIO的区别

飞乐鸟的博客 762

面试官:说说BIO、NIO、AIO有什么区别

BIO、NIO、AIO、Netty什么是IOJava中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,「网络上的数据传输流」,字符串流,对象流等等等。比如程序从服务器上下载图片,就是通过流的...

weixin_45727359的博客 315

BIO\NIO\AIO总结

文章目录定义:Java中BIO、NIO、AIO是Java语言对于操作系统的**各种IO模型的封装**。常见概念:**同步与异步:****阻塞和非阻塞:**BIO(Blocking I/O)传统BIO(一请求一应答通信模型)伪异步IO(加入线程池)NIO(New I/O)NIO简介NIO的特性/NIO与IO区别1)Non-blocking IO(非阻塞IO)2)Buffer(缓冲区)3)Channe...

weixin_44333359的博客 950

BIO、NIO、AIO的简单个人理解,同步异步和阻塞非阻塞的简单理解

非阻塞:BIOBIO同步阻塞IO总结NIO介绍同步非阻塞AIO| | || — | — |什么是io====================================================================Java IO流是一个庞大的技术体系,其内部提供了很多不同的流, 如: 输入流和输出流,细分下去还有字节流和字符流,甚至还有缓冲流提高 IO 性能,转换流将字节流转换为字符流等等什么是同步异步========================================

2401_84413531的博客 892
上一篇: 搭建SpringBoot整合Mybatis框架
下一篇: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值