网络编程基础:从BIO到NIO再到AIO(四)

BIO、NIO、AIO Java BIO 就是传统的 java io 编程,其相关的类和接口在 java.ioBIO(blocking I/O) : 同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器).​ 在上述的案例中,一个服务端只能接收一个客户端的通信请求,那么如果服务端需要处理很多个客户端的消息通信请求应该如何处理呢​ 在上述案例中:客户端的并发访问增加时。 阅读详情

最终总结:BIO、NIO、AIO 全面对比

一、核心区别一览表

对比维度BIONIOAIO
全称Blocking IONon-blocking IOAsynchronous IO
中文名阻塞式 IO非阻塞式 IO异步 IO
同步/异步同步同步异步
阻塞/非阻塞阻塞非阻塞非阻塞
线程模型一个连接一个线程一个线程管理多个连接系统线程池管理
核心组件Socket、ServerSocketSelector、Channel、ByteBufferAsynchronousChannel、CompletionHandler
适用场景连接数少、并发低连接数多、并发高连接数多、操作耗时
编程难度简单中等复杂(回调地狱)
性能低高高

二、通俗比喻总结

BIO(排队办业务)

你去银行办业务:
1. 排队等叫号(阻塞)
2. 轮到你,柜员专门为你服务(一个线程一个客户)
3. 办完才能离开(阻塞)

问题:人多了,柜员不够用(线程多,资源浪费)

NIO(银行大堂经理)

银行有个大堂经理:
1. 不断巡视各个窗口(Selector 轮询)
2. 哪个窗口有人,就去处理(事件驱动)
3. 一个经理管理所有窗口(一个线程管理多个连接)

优势:一个人干多个人的活(资源利用率高)

AIO(外卖送达通知)

你点外卖:
1. 下单后立即返回(异步)
2. 不用一直盯着(无需轮询)
3. 送到了自动打电话通知你(回调)

优势:完全不用等,到了自动通知(最高效)

BIO,NIO,多路复用,AIO BIO,NIO,多路复用,AIO 概念理解 IO流程 三大IO模型的解释 总结 BIO,NIO,多路复用,AIO 概念理解 同步和异步 关注点在于处理机制,同步在于等待上一条语句调用后的返回结果才继续,异步在于事件响应回调机制,语句调用后直接返回,等触发事件之后,自动调用写好的回调函数 阻塞非阻塞 关注点在于线程是否挂起 阻塞在于得到结果之前会挂起线程,非阻塞在于不会... 阅读详情

相关推荐

Netty(一)——BIO、NIO、AIO

         在工作中,无论什么项目我们都会用到网络传输,tomcat等server服务器、Dubbo等Rpc协议框架、Redis等NOsql数据库、各种MQ的中间件等等。这篇文章是学习《Netty权威指南》后的总结,从Java基础的BIO、NIO、AIO进行学习。         在说JavaIO以前,先看看unix提供的5种IO模型:         1,阻塞IO模型:    ...

学会改变自己——才能突破 1311

BIO、NIO、AIO详解

一、Java的I/O演进之路 Java共支持3种网络编程的I/O模型:BIO、NIO、AIO BIO: 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销 NIO: 同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求就进行处理 AIO: 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求

hxt的博客 2万+

MiniOSD DIY记

最近迷上了航模,研究了很多东西,感觉路走的长了还是适当要停下脚步休息下总结下。 这次DIY的是一块OSD设备,主要用于航模图传的叠加显示,原理也很简单就是atmel atmega328p+MAX7456芯片,网上卖的成品基本上都是一个原理图。 原理图 我按照我自己的需要做了适当的更改,去掉了DC-DC电路,直接用5V输入,因为摄像头都是5V的,所以DC-DC不是很有必要,体积上更加小了点, 打...

memoff的博客 8534

BIO、NIO、AIO 有什么区别?

BIO、NIO、AIO 有什么区别? BIO:线程发起IO请求,不管内核是否准备好IO操作,从发起请求起,线程一直阻塞,直到操作完成。 NIO:线程发起IO请求,立即返回;内核在做好IO操作的准备之后,通过调用注册的回调函数通知线程做IO操作,线程开始阻塞,直到操作完成。 AIO:线程发起IO请求,立即返回;内存做好IO操作的准备之后,做IO操作,直到操作完成或者失败,通过调用注册的回调...

ConstXiong 2万+

CAN总线错误帧全解析:从数据包到硬件层的故障树分析

本文深入解析CAN总线错误帧的故障树分析方法,从数据包到硬件层全面剖析错误机制。通过物理层信号测试、数据链路层错误解码和应用层协议排查,提供系统化的诊断框架。结合CANoe配置和示波器波形分析,帮助工程师快速定位总线故障,提升系统可靠性。

weixin_26742753的博客 491

LED背光驱动电路解析:从MP3394芯片到液晶屏灯管控制

本文深入解析了以MP3394芯片为核心的LED背光驱动电路工作原理。从升压电路的能量转换到多路LED的均流控制,详细阐述了其作为液晶屏背光“大脑”的关键作用,并提供了黑屏、闪屏、亮度不均等常见故障的实战检修思路与排查方法。

agile9scrum的博客 826

面试官:BIO、NIO、AIO是什么,他们有什么区别?

面试官:BIO、NIO、AIO是什么,他们有什么区别?

真正的大师永远怀着一颗学徒的心 9948

深入解析Simulink中的条件执行子系统:If Action与Switch Case的实战应用

本文深入解析了Simulink中两种核心的条件执行子系统:If Action Subsystem与Switch Case Action Subsystem。通过实战案例详细阐述了其工作原理、正确搭建方法以及与逻辑控制器(If模块/Switch Case模块)的协同机制,帮助工程师实现清晰、可维护的多分支逻辑控制,并规避常见建模错误。

l3m4n的博客 429

BIO,NIO,AIO的区别

BIO,NIO和AIO是Java网络编程的三种模型 BIO:同步并阻塞,服务实现模式为一个连接对应一个线程,即客户端发送一个连接,服务端要有一个线程来处理。如果连接多了,线程数量不够,就只能等待,即会发生阻塞。 NIO:同步非阻塞,服务实现模式是一个线程可以处理多个连接,即客户端发送的连接都会注册到多路复用器上,然后进行轮询连接,有I/O请求就处理 AIO:异步非阻塞,引入了异步通道,采用的是proactor模式,特点是:有效的请求才启动线程,先有操作系统完成在通知服务端 应用场景: BIO:

qxy_1218的博客 1万+

Kettle Web版部署指南

看到以上的日志则表示启动成功。

2401_89221867的博客 1719

Kalibr标定避坑指南:如何用AprilGrid板快速完成双目IMU标定

本文详细介绍了使用AprilGrid板进行Kalibr双目IMU联合标定的实战技巧,包括标定工具选型、数据采集优化、标定流程及结果验证。通过AprilGrid板的唯一标识性和抗遮挡优势,结合IMU静止标定和运动激励设计,显著提升标定精度。文章还提供了常见报错处理和高级优化技巧,帮助开发者高效完成传感器标定。

sunny的博客 282

AIO,BIO,NIO详解

一、基本概念 IO:阻塞IO BIO:同步阻塞IO。服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器需要启动一个线程进行处理,如果这个链接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。 NIO:同步非阻塞IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程进行处理。用户进程也需要时不时的询...

不务正业随手记 6737

Android系统开发面试指南:系统Launcher岗位解析

本文针对上海礼聪Android系统开发岗位(侧重系统Launcher、充电/电池/USB底层开发)提供面试指南。内容涵盖应用开发(启动流程优化)、系统底层(充电状态机、USBOTG)、编程能力(线程安全LRU实现)、问题排查(ANR分析)及沟通协作等核心考点。通过5类典型问题及技术深度解析,帮助候选人系统准备,重点考察Framework源码理解、系统调试能力和工程思维。建议结合PowerManagerService等模块源码和systrace工具进行实践准备,同时注重技术表达与协作能力的展现。

郑伟强dev的专栏 935

一文搞懂Java BIO、NIO、AIO的核心区别

简单应用、低并发场景,选 BIO 足够,编程成本低;高并发网络编程场景,选 NIO,多路复用能大幅提升性能;高并发且 IO 操作耗时较长的场景,选 AIO,异步通知能最大化利用线程资源。掌握这三种 IO 模型的核心区别,能帮助我们在实际开发中做出更合理的技术选型,写出更高效的 Java 程序。

2301_79892101的博客 2358

HMC7044调试指南与FPGA开发

最后,我们介绍了在FPGA开发中使用HMC7044的几个常见应用场景,包括时钟分配、时钟同步、高精度时钟生成和时钟域交叉。根据您的应用需求,您可以选择不同的时钟分配方案,例如使用PLL生成特定频率的时钟信号,或者通过分频器生成较低频率的时钟信号。HMC7044可以提供精确的时钟同步功能,确保各个FPGA板之间的时钟信号保持一致,从而实现可靠的数据传输和协同操作。HMC7044可以实现时钟域之间的交叉,通过生成和分配不同频率的时钟信号,使得不同时钟域的模块能够协同工作。FPGA开发中的HMC7044应用。

CqpFsharp的博客 3619

精雕软件(JDpaint) 5.5 绿色版

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

BIO、NIO与AIO

I/O 模型:就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收,很大程度上决定了程序通信的性能,Java 共支持 3 种网络编程的/IO 模型:**BIO、NIO、AIO** 1 每当接收到一个Socket连接就会创建一个新的线程,线程的竞争以及上下文切换会影响性能;2 每个线程都会占用栈空间和CPU资源;3 并不是每个socket都进行IO操作,无意义的线程处理(即使客户端没有消息,服务端的线程也会阻塞等待);

weixin_42828342的博客 1718

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

JAVAIO模型之NIO、BIO、AIO

IO模型 io模型就是各种数据使用相应通道进行发送和接收。Java共支持三种网络编程IO模式 BIO、NIO、AIO BIO (Blocking IO) 同步阻塞模型,一个客户端连接对应一个处理线程。 缺点 IO代码里read是阻塞操作,如果连接不做读写操作会导致线程阻塞,浪费资源 如果读写很多,会导致服务器线程过多,压力太大。 应用场景 BIO适用于连接数目较小且固定的架构,这种方式对服务器资源的要求比较高,但是程序简单易理解。 示例代码 /** * 服务端 * @author 风信子 */

Zev_java的博客 1421

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

流华追梦的专栏 2117

详解BIO,NIO,AIO

详解BIO,NIO,AIO

m0_66220639的博客 1258

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

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

2401_85910670的博客 1147

BIO、NIO、AIO的区别?

Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。

西京刀客 1255

3 JDK 常见的包和BIO,NIO,AIO

NIO (New I/O):NIO是一种同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,对应 java.nio包,提供了 Channel , Selector,Buffer等抽象。非阻塞模式正好与之相反。AIO 是异步IO的缩写,虽然 NIO 在网络操作中,提供了非阻塞的方法,但是 NIO 的 IO 行为还是同步的。在活动连接数不是特别高(小于单机1000)的情况下,这种模型是比较不错的,可以让每一个连接专注于自己的 I/O 并且编程模型简单,也不用过多考虑系统的过载、限流等问题。

yusongcao的博客 2153

Java的BIO、NIO、AIO模型

NIO方式适用于连接数目多且连接比较短(轻操作) 的架构, 比如聊天服务器, 弹幕系统, 服务器间通讯,编程比较复杂, JDK1.4 开始支持。2、channel 会注册到 selector 上,由 selector 根据 channel 读写事件的发生将其交由某个空闲的线程处理。同步非阻塞,服务器实现模式为一个线程可以处理多个请求(连接),客户端发送的连接请求都会注册到。1、IO代码里read操作是阻塞操作,如果连接不做数据读写操作会导致线程阻塞,浪费资源。同步阻塞模型,一个客户端连接对应一个处理线程。

weixin_42037190的博客 1048

BIO,NIO,AIO 简要总结

文章目录BIO,NIO,AIO 总结1. BIO (Blocking I/O)1.1 传统 BIO1.2 伪异步 IO1.3 代码示例1.4 总结2. NIO (New I/O)2.1 NIO 简介2.2 NIO的特性/NIO与IO区别1)Non-blocking IO(非阻塞IO)2)Buffer(缓冲区)3)Channel (通道)4)Selectors(选择器)2.3 NIO 读数据和写数据...

VicterTian的博客 1732
上一篇: 网络编程基础:从BIO到NIO再到AIO(三)
下一篇: Netty入门学习笔记(一)
不早睡不改名@
博客等级 码龄5年 536粉丝 306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值