JAVA IO 模型详解

news2024/11/29 6:26:27

什么是IO

I/O(Input/Outpu) 即输入/输出 。
从计算机结构的视角来看的话, I/O 描述了计算机系统与外部设备之间通信的过程。
从应用程序的视角来看的话,我们的应用程序对操作系统的内核发起 IO 调用(系统调用),操作系统负责的内核执行具体的 IO 操作。也就是说,我们的应用程序实际上只是发起了 IO 操作的调用而已,具体 IO 的执行是由操作系统的内核来完成的。
当应用程序发起 I/O 调用后,会经历两个步骤:
(1)内核等待 I/O 设备准备好数据
(2)内核将数据从内核空间拷贝到用户空间。

JAVA中常见的三种IO模型

BIO

BIO 属于同步阻塞 IO 模型 。
同步阻塞 IO 模型中,应用程序发起 read 调用后,会一直阻塞,直到内核把数据拷贝到用户空间。
在这里插入图片描述
在客户端连接数量不高的情况下,是没问题的。但是,当面对十万甚至百万级连接的时候,传统的 BIO 模型是无能为力的。因此,我们需要一种更高效的 I/O 处理模型来应对更高的并发量。

NIO

Java 中的 NIO 可以看作是 I/O 多路复用模型。也有很多人认为,Java 中的 NIO 属于同步非阻塞 IO 模型。
NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。
Channel(通道)
Channel,国内大多翻译成“通道”。Channel和IO中的Stream(流)是差不多一个等级的。只不过Stream是单向的,而Channel是双向的,既可以用来进行读操作,又可以用来进行写操作。
Buffer(缓冲区)
Buffer,故名思意,缓冲区,实际上是一个容器,是一个连续数组。Channel提供从文件、网络读取数据的渠道,但是读取或写入的数据都必须经由Buffer。
Selector
Selector 一般称 为选择器 ,当然你也可以翻译为多路复用器 。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。
使用Selector的好处在于: 使用更少的线程来就可以来处理通道了, 相比使用多个线程,避免了线程上下文切换带来的开销。
在这里插入图片描述

AIO

IO 也就是 NIO 2。Java 7 中引入了 NIO 的改进版 NIO 2,它是异步 IO 模型。异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。
在这里插入图片描述

总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/470554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMq windows 安装

RocketMq安装步骤: 1、直接在官网下载。也可以从这里自取 https://rocketmq.apache.org/download/ 2、修改bin目录下的文件 runserver.cmd 和 runbroker.cmd文件。主要修改所占用内存的大小。 runserver.cmd 修改如下: runbroker.cmd 修改如下&#xff…

数据结构与算法(三):树论(树形结构、二叉树、二叉搜索树、红黑树、BtreeB+Tree、赫夫曼树、堆树)

树论(树形结构、二叉树、二叉搜索树、红黑树、Btree、BTree、赫夫曼树、堆树) 树形结构概念 在树形结构里面重要的术语: 结点:树里面的元素。 父子关系:结点之间相连的边 子树:当结点大于1时&#xff0…

牛客网CM11 链表分割

CM11 链表分割 描述示例解题思路以及代码解法1解法2 描述 现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。 示例 解题…

JDBC详解(四):操作BLOB类型字段(超详解)

JDBC详解(四):操作BLOB类型字段 前言一、MySQL BLOB类型二、向数据表中插入大数据类型三、修改数据表中的Blob类型字段四、从数据表中读取大数据类型 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴…

倾斜摄影超大场景的三维模型轻量化与三维展示效果的关系浅析

倾斜摄影超大场景的三维模型轻量化与三维展示效果的关系浅析 倾斜摄影超大场景的三维模型由于数据量庞大,直接进行渲染可能会导致计算资源和时间的浪费。因此,针对倾斜摄影超大场景的三维模型区域进行轻量化处理是一种有效的优化手段。但是,轻…

macOS 13.4Beta 3(22F5049e)With OpenCore 0.9.2开发版 and winPE双引导分区原版镜像

镜像特点 完全由黑果魏叔官方制作,针对各种机型进行默认配置,让黑苹果安装不再困难。系统镜像设置为双引导分区,全面去除clover引导分区(如有需要,可以自行直接替换opencore分区文件为clover引导文件)备注…

Python3语法笔记(后篇)

文章目录 前言函数输入参数返回值装饰器(decorator)Lambda表达式(匿名函数)文档和注解 类类和实例特殊方法继承枚举类 错误和异常后记 前言 这篇文章主要用于记录Python3相关语法,方便自己查阅使用。 Python3语法笔记…

rsync之include、exclude使用

rsync之include、exclude使用 注意:exclude可单独使用,include必须和exclude配合使用 环境: 服务端: 在做同步之前必须要知道的含义: --exclude* 排除所有文件,包括目录,因为在linux一切皆…

自动拣货仓库亮灯方案

方案目标概叙: 系统在美团平台下单后,骑手会收到取货码,凭借取货码到指定的智能仓库去取货,仓库标签系统调取相应订单信息,执行亮灯指令(屏幕显示订单信息及拣货数量,并亮灯)&#…

window server dos命令集合

1、 删除任务管理器服务里的服务项,用管理员运行cmd, 再运行:sc delete ServiceName ServiceName从服务属性里查。

爬虫为什么需要ip

爬虫需要使用爬虫ip主要是为了解决以下问题: 1、反爬虫机制:许多网站会设置反爬虫机制来防止爬虫程序的访问,例如限制IP地址的访问频率、检测访问来源等。使用爬虫ip可以绕过这些限制,使得爬虫程序更难被检测到。 2、访问限制&a…

Figma快速转换为Sketch文件格式的方法

由于Sketch允许第三方插件,例如应用程序集成和数据提供,许多设计和开发人员喜欢将Figma文件导入Sketch,并将其转换为Sketch格式。 但是令人头痛的是,Figma只支持Sketch文件的导入,而不支持Sketch文件的导出。这篇文章…

vue项目引入字体样式

1、先下载好需要的字体样式,下载好的应该是个.ttf文件 2、在asset中创建fonts文件夹,将字体样式文件放进去,然后再到里面创建font.css文件 3、font.css文件里面进行引用 font-face {/* 重命名字体名 */font-family: HeFengShuDaoZhaoHe;/*…

无惧黑暗强光,纯视觉导航也能全天候作业

对于一台激光导航扫地机器人而言,全天候作业并非难事,那么纯视觉导航扫地机器人能做到吗? 无论对于人,还是机器人,光线环境的变化对“眼睛”的影响都是致命的。由于视觉传感器对于光线十分敏感,在家庭场景…

TDA4VM/VH 芯片 NAVSS0

请从官网下载 TD4VM 技术参考手册,地址如下: TDA4VM 技术参考手册地址 概述 (NAVSS0 的介绍在 TRM 的第10.2章节) NAVSS0 可以看作 MAIN 域的一个复杂外设域,实现如下功能: UDMASS: DMA 管理子系统;MODSS&#xf…

【GPT】你需要了解的 ChatGPT的技术原理- Transformer架构及NLP技术演进

目录 概述 The Concept of Transformers and Training A Transformers ModelTransformers 的概念和训练 Transformers 模型

2023年第二十届五一数学建模竞赛赛题浅析

我们带来五一赛题的一个c题解析这个的目的,就是为了帮助大家更好的选题,简单的看一下这个几个题目就可以。然后我们题目给出的这个文件夹就是包括三个赛题,还有我们各个赛题的论文规范模板,这三个我们论文写作的时候才会用到。主要…

【某区护网】从外网打点到拿下集团域控

目录 web打点 反弹shell与权限维持 主机信息收集与反向代理 攻击域控 最后 前端时间刚结束了攻防演练活动,其中一项成果为拿下某集团域控制器权限,直接控制域内主机5000多台。以下为攻击过程的粗略记录,整体来说还是比较容易。 web打点…

常见HTTP攻击赏析(3)

基于OpenAPI的APIcat开源日志监控软件已经开发一段时间了,在自己的网站上抓到了一些HTTP的攻击,没事,我们就汇总给大家做个赏析,也当是个提醒。 这是一篇系列文章,数据反馈,看的人还是不少的,感…

Java知识学习13(AQS详解)

1、AQS介绍? AQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是抽象队列同步器。这个类在 java.util.concurrent.locks 包下面。 AQS 就是一个抽象类,主要用来构建锁和同步器。 public abstract class AbstractQueuedSynchron…