几种 IO编程比较

article/2025/9/22 7:12:37

参考:
Netty权威指南第一版
Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

1. 传统的BIO模型

通常由一个独立的Acceptor线程负责监听客户端的连接,它接收到客户端连接请求之后为每个客户端创建一个新的线程进行处理,处理完之后,通过流返回应答给客户端,线程销毁。这就是典型的—请求—应答通信模型。

该模型最大的问题就是缺乏弹性伸缩能力,当客户端并发量增加后,服务端的线程个数和客户端并发访问呈1:1的正比关系,由于线程是java虚拟机非常宝贵的系统资源,当线程数膨胀以后,系统的性能将急剧下降,随着并发访问量的继续增大,系统会发生线程堆溢出、创建新线程失败等问题,并最终导致进程宕机或者僵死,不能对外提供服务。

2. 伪异步IO编程

对同步阻塞IO面临的问题,后来有人对它的线程模型进行了优化,后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M :线程池最大线程数N的比例关系,其中M可以远远大于N,通过线程池可以灵活的调配线程资源,设置线程的最大值,防止由于海量并发接入导致线程耗尽。

该方式避免了为每个请求都创建一个独立线程造成的线程资源耗尽。但是由于它底层的通信依然采用同步阻塞模型,因此无法从根本上解决问题。

分析:
如果每个read操作都阻塞,导致线程池很快饱和,将不能继续处理新的请求,导致服务不可用。

3. NIO编程

相关概念:

  1. 缓冲区Buffer

    • ByteBuffer:字节缓冲区
    • CharBuffer:字符缓冲区
    • ShortBuffer:短整型缓冲区
    • IntBuffer:整型缓冲区
    • LongBuffer:长整型缓冲区
    • FloatBuffer:浮点型缓冲区
    • DoubleBuffer:双精度浮点型缓冲区
  2. 通道

  3. 多路复用Selector

4. AIO编程

JDK1.7 提供了NIO2.0, 引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现。异步通道提供两种方式获取操作结果:

  • 通多java.util.concurrent.Future类来表示异步操作的结果
  • 在执行异步操作的时候传入一个java.nio.channels

NIO2.0 的异步套接字通道是真正的异步非阻塞IO,它对应UNIX网络编程中的事件驱动IO(AIO),它不需要通过多路复用器(Selector)对注册的通道进行轮训操作即可实现异步读写,从而简化NIO的编程模型。

AIO是真正的异步非阻塞的,所以,在面对超级大量的客户端,更能得心应手。

5. 4种IO比较

概念澄清

  • 异步非阻塞IO

    很多人习惯将JDK1.4提供的NIO称为异步非阻塞IO,其实严格按照UNIX网络编程模型和JDK实现区分,实际上它只能被称为非阻塞IO,不能叫做异步非阻塞IO。在早期JDK1.4和1.5 update10版本之前,JDK的Selector基于select/poll模型实现,它是基于IO复用技术的非阻塞IO,不是异步IO。在JDK1.5 update10和Linux core2.6以上,Sun优化了Selector的实现,它在底层使用epoll替换了select/poll,上层的API没有变化,可以认为是JDK NIO的一次性能优化,但是它仍旧没有改变IO的模型。

    JDK1.7提供的NIO2.0才真正的异步IO。

  • 多路复用器Selector

    将Selector翻译成选择器体现不出Selector的功能和特点,翻译为多路复用器更为合适。

  • 伪异步

    伪异步IO完全来自实践,后端采用线程池来处理IO任务。

对比

IO模型对比

结语

具体代码可查阅《Netty权威指南》或者参考博客Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)


http://chatgpt.dhexx.cn/article/BWqJqhbZ.shtml

相关文章

Java实验报告(七)|IO编程

文章目录 题目一题目二题目三 题目一 (一)编程实现打印目录“C:/”下所有后缀为“.txt”文件名。 import java.io.File; import java.util.Scanner; public class ShowTxt {public static void main(String[] args) {System.out.println("请输入要…

Linux下C语言编程(1):IO编程

笔者今天来讲讲Linux下IO口的使用。用的硬件是三大开源器件之一的BeagleBone(狗骨头)。 (PS 三大开源器件:树莓派、Arduino和Beagle Bone) 硬件介绍 TI公司的AM3358 集成 1G MHz ARM Cortex™ A8 内核, 4G…

IO接口编程

IO接口编程 作者: Saint 掘金:https://juejin.im/user/5aa1f89b6fb9a028bb18966a 微博:https://weibo.com/5458277467/profile?topnav1&wvr6&is_all1 GitHub:github.com/saint-000 CSDN: https://me.csdn.net/qq_405319…

网络编程IO

文章目录 前言用户空间和内核空间系统调用一、同步IO模型1、阻塞式IO模型2、非阻塞式IO模型3、IO复用模型4、信号驱动IO模型 二、异步IO模型三、同步和异步 前言 IO操作由两个部分组成:发起IO请求、实际进行IO操作。 也就是下图所示的等待数据从磁盘拷贝到内核空间…

Linux 下文件IO编程进程控制实验

Linux 下文件IO编程&进程控制实验 一、基本I/O操作 (1).Linux的输入/输出(I/O)操作,通常为五个方面:打开,读取,写入,定位和关闭;对应的函数分别为:open(…

文件IO(IO编程)

一、文件IO&#xff08;IO编程&#xff09; 系统IO&#xff1a;和系统有关的IO接口函数 标准IO: 标准库里面的IO接口函数 #include <stdio.h> 目录操作&#xff1a;操作目录相关的IO接口函数 LCD屏的操作&#xff1a;刷图 TS(touch screen)触摸屏的操作:点击、滑动 二、…

I/O编程

一、标准IO 1.1、概述 标准IO 是ANSI C提供的函数接口&#xff0c;在文件IO的基础上封装出来的。任何兼容标准C库的操作系统都可以使用接口&#xff0c;具有更好的移植性。标准IO在执行时也会用到系统调用&#xff0c;为了增加内核的工作效率&#xff0c;减少资源浪费&#…

小米平板2装win10(附驱动)

前段时间在折腾着怎么给米pad2装win10&#xff0c;结果驱动什么的折腾了好久。 给米pad2装win10&#xff0c;其实就和给普通的电脑装win10差不多的步骤。 第一步&#xff0c;制作U盘启动器。工具什么的就用官方的winPE就好&#xff0c;iso就随意吧。 第二步&#xff0c;给米…

小米笔记本系统win10家庭版升级为企业版(专业版)

一.背景 新入职一家IT公司,由于公司领导层是小米粉,基本新入职的员工人手一本小米笔记本.小米笔记本默认自带的是家庭版的,由于之前公司很多人用的都是家庭版的,在某些极为特殊的软件开发情况下,家庭版的配置给开发带来了极大的困难,后来经过查资料验证企业版是不会出现这种情…

小米mix2s刷win11和android双系统

在给电脑安装系统的过程中&#xff0c;可能会因为各种原因出现windows无法安装的情况&#xff0c;我在给小米mix2s安装win11时发现出现了“计算机意外地重新启动或遇到错误&#xff0c;windows无法安装”的情况&#xff0c;下面就来教一下大家两种解决方法&#xff0c;希望可以…

小米air13.3一代的win10系统重装

仅作为记录&#xff0c;大佬请跳过 小米air的系统重装在进入bios之后&#xff0c;选择u盘启动时&#xff08;需要设置一个密码&#xff0c;然后关闭secure boot&#xff09;有点跟神船不一样&#xff0c;作为记录。 参考大佬博主文章传送门

Win10 IPv6 远程桌面连接(小米路由器)

前排广告&#xff1a;2021金三银四&#xff0c;字节跳动招人季&#xff0c;平均反馈时间仅1天&#xff01;选择覆盖达6大城市&#xff01;——2021年字节跳动飞书团队内推活动正式开启&#xff0c;岗位列表见&#xff1a;https://job.toutiao.com/s/eNtDcGu。除了这个投递连接外…

小米4A千兆刷OpenWrt_Win10

在Linux上试了一下&#xff0c;最终telnet 196.168.31.1失败&#xff0c;网上找了一些教程&#xff0c;改到win10下刷成功了。 1 先安装Pthon3 和pip3&#xff0c;然后pip3 install requests&#xff0c;不然会报错 2 win10开启telnet&#xff0c;方法简单自行百度&#xff1…

小米平板2可以装鸿蒙系统,详细教程!教你小米平板2轻松刷Win10

众所周知&#xff0c;小米平板2拥有MIUI和Windows 10两个版本&#xff0c;这两个版本在硬件上是一致的(除了机身存储空间不同)&#xff0c;所以理论上存在通刷的可能。 现在&#xff0c;有网友在MIUI论坛中共享了小米平板2刷Windows 10的教程&#xff0c;有兴趣的不妨一起来看看…

win10 下载

win10 下载 https://www.microsoft.com/zh-cn/software-download/windows10 Windows 10 2022 更新 l 版本 22H2 选择版本 以下 Windows 10 版本对于 Windows 10 家庭版和 Windows 10 专业版都有效。 如果您想验证下载数据的完整性和真实性&#xff0c;请按照以下步骤操作&…

计算机连接小米usb驱动,win10系统安装小米usb驱动的详细步骤

随着电脑的使用率越来越高&#xff0c;我们有时候可能会遇到对win10系统安装小米usb驱动进行设置&#xff0c;如果我们需要对win7系统安装小米usb驱动进行设置时&#xff0c;要怎么处理win10系统安装小米usb驱动的设置方法非常简单。 设置方法&#xff1a; 1、首先先下载小米驱…

win10 android 手机驱动下载,小米手机驱动win10驱动

小米手机usb驱动win10驱动是Win10系统专用的小米手机USB连接驱动&#xff0c;Win10电脑想要通过USB数据线与小米手机连接&#xff0c;必需安装这个驱动&#xff0c;从而可以使用电脑管理手机中的文件&#xff0c;以及进行线刷、解锁等操作&#xff0c;支持32位以及64位的Win10系…

【日常技巧】小米手机投屏至win10笔记本

最近需要多次实现自己手机与电脑的投屏&#xff0c;却又不想安装其他第三方软件&#xff0c;最终找到方法&#xff0c;做以下记录。 系统说明 手机&#xff1a;MIUI12.0.2稳定版 电脑&#xff1a;win10 前提条件 手机与电脑同处于同一wifi下 操作步骤 1.打开win10电脑投屏…

小米笔记本怎么恢复出厂的系统

买了台小米pro笔记本,中途自己重装了一次win10专业版,自己安装系统之后,自然很多电脑自带的软件和功能就没有了,比如Dolby,指纹解锁,正版的win10和office. 之前一直以为小米笔记本里面的软件都是预装在win10里面,只要有原厂的镜像就可以安装了,但是一直没找到.最近刚好系统又出…

小米笔记本pro15.6黑苹果+win10双系统/多系统

基本信息 配置,小米笔记本PRO 15.6 硬盘&#xff1a;杂牌 显卡&#xff1a;MX150/H610 CPU:i7-8550 简介&#xff1a;win10苹果双系统&#xff0c;双硬盘双系统&#xff0c;自带的pm981硬盘以前成功装过一次&#xff0c; 目前已知&#xff1a; MAC时间不同步&#xff08;…