首页 > 编程语言 >Java IO 模型

Java IO 模型

时间:2023-12-20 15:26:05浏览次数:27  
标签:Java 请求 Buffer 模型 AIO 线程 IO Channel

IO 是个啥

IO,是 input/output 的缩写,表面意思是输入/输出,描述计算机中数据流动的过程,实际上就是 CPU、内存和外部进行数据交换的过程

举个例子,某个进程要获取到数据的过程如下:
image

  • 1.请求:进程请求外部数据
  • 2.准备:缓冲区准备数据,通过磁盘或者网络读取数据到内核空的缓冲区
  • 3.拷贝:将数据从内核空间再拷贝到进程的内存

Java 中的网络 IO

Java 中的网络 IO 模型分三种:

  • BIO
    阻塞 IO(Blocking IO),服务器为每个客户端连接开启一个线程来处理请求
    image
  • NIO
    同步非阻塞 IO(Non-Blocking IO),服务器实现模式为一个线程处理多个请求(连接),即连接请求都会注册到多路复用器(Selector)上,多路复用器轮询到连接有 I/O 请求就进行处理
    image

单个线程,可以处理更多的客户端请求
image

一个 Selector 对应一个处理线程
一个 Selector 上可以注册多个 Channel
每个 Channel 都会对应一个 Buffer(有时候一个 Channel 可以使用多个 Buffer,这时候程序要进行多个 Buffer 的分散和聚集操作)
Buffer 的本质是一个内存块,底层实现是一个数组
Selector 会根据不同的事件在各个 Channel 上切换
Buffer 是双向的,可以读/写,如果切换读写,则需要调用 Buffer 的 flip 方法
Channel 也是双向的,数据可以流入/流出

  • AIO
    异步非阻塞 IO(Async Non-Blocking IO),AIO 引入异步通道的概念,由操作系统完成与客户端之间的 read/write,之后再由操作系统主动通知服务器线程去处理后面的工作,在这个过程中服务器线程不必同步等待 read/write 完成。由于不同的操作系统对 AIO 的支持程度不同,AIO 目前未得到广泛应用。

适用场景

I/O模式 使用场景 JDK版本
BIO 连接数比较小且固定的架构 1.4以前
NIO 连接数目多且连接比较短的架构 1.4开始
AIO 连接数目多且连接时间长的架构 1.7开始

标签:Java,请求,Buffer,模型,AIO,线程,IO,Channel
From: https://www.cnblogs.com/yangzhenlong/p/17916566.html

相关文章

  • 多模态大模型的体验
    主要是出图,结合实际做3个例子:1、形容天气非常寒冷的风景图片(画一幅未来极度寒冷下城市的场景)2、妈妈过生日的庆祝图片(画一幅妈妈过生日的庆祝图片,水墨画风格)3、包含GreenOpen字样的富含科技感的图片未来不可限量,对于当前来说是提出准确的需求。关注提高用户体验:......
  • Java中“100==100”为true,而"1000==1000"为false?
    前言今天跟大家聊一个有趣的话题,在Java中两个Integer对象做比较时,会产生意想不到的结果。例如:Integera=100;Integerb=100;System.out.println(a==b);其运行结果是:true。而如果改成下面这样:Integera=1000;Integerb=1000;System.out.println(a==b);其运行......
  • 分类模型评估(混淆矩阵, precision, recall, f1-score)的原理和Python实现
    混淆矩阵当我们已经获取到一个分类模型的预测值,可以通过不同指标来进行评估。往往衡量二分类模型是基于以下的混淆矩阵概念:TruePositive:真实值为正、预测值为正(真阳性)FalsePositive:真实值为负、预测值为正(假阳性)FalseNegative:真实值为正、预测值为负(假阴性)TrueNegative......
  • 秦疆的Java课程笔记:79 异常 自定义异常及经验小结
    使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。(秦疆老师:用的不多,但开源框架或者大型系统会用到。)用户自定义异常类,只需要继承Exception类即可。自定义异常类的步骤:创建自定义异常类在方法中通过throw关键字抛出异常对象......
  • vue项目多axios实例动态创建
    //通用请求拦截器importaxiosfrom"axios";importQsfrom"qs";importstorefrom"@/store";importrouterfrom"@/router";import{Loading,Message}from"element-ui";//引用element-ui的加载和消息提示组件letloading......
  • hyperion系统安装
    设置操作系统,新建账户epm_admin设置acl绕过遍历检查作为操作系统作为批处理登录作为服务登录下载oracleepm安装包OracleSoftwareDelivhttps://edelivery.oracle.com/osdc/faces/Home.jspxeryCloud解压安装包到同一个目录下安装安装oracle数据库使用al32-u......
  • 使用WinSW将jar创建成Windows服务;使用Microsoft.Extensions.Hosting.WindowsServices
    【背景】我们有几个历史产品,需要部署在Windows系统上,产品有jar包,也有.net工程,为了优美的启动服务,思考了两种处理方式。第一种是电脑开机启动,将启动命令设置为快捷键,并将快捷键拷贝到C:\ProgramData\Microsoft\Windows\StartMenu\Programs\Startup目录下,该方式有个缺点,由于ja......
  • IPQ8074/IPQ8072 What's the performance difference?|8X8 4X4 High Performance 802.
    IPQ8074/IPQ8072What'stheperformancedifference?|8X84X4HighPerformance802.11axSolutionInthefast-pacedworldofwirelessconnectivity,choosingtherightroutermotherboardcanmakeallthedifferenceinyournetwork'sperformance.Inth......
  • Java学习之apache poi操作Excel文件
    创建Java项目,然后加入Maven依赖如下:读取指定的Excel文件写入既存的Excel文件 创建新的Excel,添加文件内容......
  • 《深入浅出Java虚拟机:JVM原理与实战》
    ......