浅谈Java NIO

Java NIO(New Input/Output)是Java平台上一种全新的IO API,相较于传统的Java I/O(也称为BIO,阻塞I/O),NIO引入了非阻塞I/O和通道(Channel)的概念,以及缓冲区(Buffer)和选择器(Selector)机制,大大提升了系统的并发处理能力和性能。以下是对NIO实现原理的关键点概述:

  1. 非阻塞I/O

    • 在传统的BIO中,当调用read或write方法时,线程会一直阻塞,直到数据准备好或写出成功。而在NIO中,当调用read或write方法时,如果没有数据可读或不能立即写入,线程不会被阻塞,而是继续执行其他任务,稍后再回来看看数据是否准备就绪。
  2. 通道(Channel)

    • Channel是NIO的基础,它是连接到实体(如硬件设备、文件、网络套接字等)的抽象接口,可以用于读写数据。与传统的InputStream和OutputStream不同,通道既可以读数据也可以写数据。
  3. 缓冲区(Buffer)

    • 缓冲区是NIO中用来存储数据的区域,它是内存的一部分,可以存放不同类型的数据(如字节、字符、整数、浮点数等)。缓冲区有自己的容量、当前位置和界限,这使得NIO能够在批量处理数据时更加高效。
    • Buffer本质上是一块可以写入数据,然后可以从中读取数据的内存。
    • Buffer对象包含三个重要的属性,分别是capacity、position、limit,其中position和limit的含义取决于Buffer处在读模式还是写模式。
      – capacity:capacity是指Buffer对象的最大容量,即它可以存储的数据总量。一旦创建了一个Buffer对象并分配了容量,这个容量就不能改变。例如,如果你创建了一个容量为100的ByteBuffer,那么它最多可以存储100个字节的数据。
      – position:position是当前读写操作的当前位置。初始情况下,position设置为0。当你从Buffer中读取数据时,position会向前移动,表示已经读取了多少数据;当你往Buffer中写入数据时,position也会向前移动,表示已经写入了多少数据。position的值始终在0到limit-1之间。
      – limit:limit标记了Buffer中可以被读取或写入数据的数量边界。对于写入操作,limit等于Buffer的capacity;而对于读取操作,limit等于最后一次写入操作后的position值。也就是说,limit表示的是当前剩余可以读取的数据量或者是还能写入的最大数据量。
      – 三个属性之间的关系,如下图所示:
      在这里插入图片描述
  4. 选择器(Selector)

    • 选择器是NIO的重要特性,它允许单个线程监控多个通道的事件(如连接打开、数据到达等)。通过注册通道到选择器,线程可以检测哪些通道准备好了读、写或有新的连接。当调用select方法时,线程会阻塞,直到至少有一个通道准备好进行所关心的操作。
      这是在一个单线程中使用一个Selector处理3个Channel的图示:
      在这里插入图片描述
  5. 事件驱动

    • NIO基于事件驱动模型,这意味着系统不会浪费CPU周期去持续查询是否有事件发生。相反,当有事件发生时,操作系统会通知Java应用程序,这样可以极大地提高并发处理能力,特别是在大规模并发连接场景下。
  6. 堆外内存(Direct Buffers)

    • NIO还可以直接操作堆外内存,即通过DirectByteBuffer等类直接与操作系统交互,减少Java堆和内核空间之间的数据复制,进一步提高性能。

Java NIO通过非阻塞I/O、通道、缓冲区和选择器机制,实现了高效的数据传输和处理,特别适合处理高并发、低延迟的网络通信和服务端编程场景。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣:49. 字母异位词分组

知识点: 散列函数 散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位: 1. 直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)key或H&a…

企业如何上百度百科

企业想要上百度百科,首先需要创建属于自己的词条。创建企业百度百科词条的步骤如下: 企业认证:企业需要提供营业执照等证明材料,以证明其合法性。此外,企业营业执照的注册时间必须满一年及以上,且在近一年内没有因为经…

如何在CentOS安装Firefox并结合内网穿透工具实现公网访问本地火狐浏览器

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器,由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…

(Talk-Bot,ichat助手,ChatK,DGAL,NextChat,FreeGPT,动点原版chatgpt)分享7个好用ChatGPT

目录 目录 1、Talk-Bot 2、ichat助手 3、ChatK 4、DGAI 5、NextChat 6、Chkzh-Aink 7、FreeGPT | dongstop.vip 8、动点原版chatgpt 1、Talk-Bot https://vip.gptchatclub.org/?fromweb 2、ichat助手 https://chat.letdata.net/ichat/59w2x4n3pow https://ichat2019.com/ichat…

1231: 寻找出现次数最多的数

解法&#xff1a; #include<iostream> #include<algorithm> #include<vector> #include<unordered_map> #include<utility> using namespace std; int main() {int n, a;cin >> n;unordered_map<int, int> mp;while (n--) {cin >…

【Web】VS Code 插件

专栏文章索引&#xff1a;Web 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、安装步骤 二、插件 1.Chinese (Simplified) (简体中文) 2.open in browser 3.vscode-icons 4.Live Server 5.Live Server Preview 6.翻译(英汉词典) 一、安装步骤 点击 “扩…

Navicat 干货 | 了解 PostgreSQL 规则

PostgreSQL 是一个强大的开源关系型数据库管理系统&#xff0c;为增强数据管理和操作提供了丰富的功能。这些功能中包含了规则&#xff0c;这是一种用于控制数据库内部查询和命令处理方式的机制。本文将探讨 PostgreSQL 规则的工作原理&#xff0c;以及它们与触发器的区别&…

中东跨境电商平台Noon注册开店步骤详解

中东地区&#xff0c;素以“满地富豪”闻名&#xff0c;同时拥有发达的电子商务环境与较高的居民消费水平&#xff0c;吸引了大量跨境电商从业者前来寻求商机。其中&#xff0c;Noon作为中东地区颇具人气的电商平台&#xff0c;自然而然成为了众多卖家开拓中东市场的首选平台。…

关于Qt主窗口的菜单部件

前言 在介绍主窗口的两大部件之前&#xff0c;我们要先知道关于主窗口的一些知识。 主窗口 一个主窗口可以没有菜单条、工具条、状态条&#xff0c;但必须设置中心部件。在 Q 生成的 C头文件 ui_mainwindow.h 代码中,我们可以看到以下代码: centralWidget new Qwidget(MainWi…

节省时间和资源:了解如何最大化渲染农场的排队管理效率

在3D渲染领域&#xff0c;时间的价值无可替代。随著3D艺术家与制作工作室不断挑战技术极限&#xff0c;对高效计算资源的渴求空前增长&#xff0c;渲染农场因此成为了渲染任务中不可或缺的力量。其核心在于排队系统——这一动态且复杂的结构负责安排和最优化渲染任务的执行顺序…

剑指Offer题目笔记31(图的搜索)

面试题105&#xff1a; 解决方案&#xff1a; ​ 逐一扫描矩阵的每一个格子&#xff0c;如果遇到一个值为1的格子并且它不在已知的岛屿上&#xff0c;那么就到达了一个新的岛屿&#xff0c;于是搜索这个岛屿并且计算它的面积&#xff0c;在比较所有岛屿的面积之后就可以知道最…

高标准化及可扩展的产品能力,助力声通科技运营效率不断提升

高标准化及可扩展的产品能力对企业发展具有重要意义&#xff0c;有助于企业提高运营效率、增强市场竞争力&#xff0c;并推动企业实现规模化发展。上海声通信息科技股份有限公司&#xff08;下文称&#xff1a;声通科技或公司&#xff09;作为我国领先的企业级全栈交互式人工智…

C语言练习:变种水仙花数

今天让我们来看看变种的水仙花吧&#xff0c;话不多说&#xff0c;直入主题。 题目描述 变种水仙花数- Lily Number: 把任意的数字&#xff0c;从中间拆分成两个数字&#xff0c;比如1461可 以拆分成(1和461)&#xff0c;(14和61)&#xff0c;(146和1),如果所有拆分后的乘积之和…

Activity——绘制第一张流程图bpmn

文章目录 前言流程符号事件Event活动 Activity网关 GateWay流向 Flow 使用idea绘制第一张流程图设置流程图各节点属性流程图转换图片 问题原因与问题解决汇总问题一&#xff1a;流程乱码问题二&#xff1a;其他idea主题无左侧 Bpmn Editor 设置框问题三&#xff1a;idea右键xml…

DataGrip数据库管理工具安装使用

DataGrip数据库管理工具安装使用 DataGrip介绍 DataGrip是jetbrains旗下的一款数据库管理工具&#xff0c;相信做过java开发的同学都知道&#xff0c;idea就是这家公司发明的。 DataGrip 是JetBrains公司开发的数据库管理客户端工具&#xff08;操作数据库的IDE&#xff0c;…

imx6ull官方源码linux内核移植

1.尝试官方源码 在正点原子给的资料里找到NXP官方原版linux源码&#xff0c;路径为&#xff1a; 1、例程源码->4、 NXP 官方 原版 Uboot和 Linux->linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2。复制并解压。 修改顶层Makefile 编译一下 make -j16 出现以下错误 修改 就…

react17 + antd4 如何实现Card组件与左侧内容对齐并撑满高度

在使用antd进行页面布局时&#xff0c;经常会遇到需要将内容区域进行左右分栏&#xff0c;并在右侧区域内放置一个或多个Card组件的情况。然而&#xff0c;有时我们会发现右侧的Card组件并不能与左侧的栏目对齐&#xff0c;尤其是当左侧栏目高度动态变化时。本文将介绍如何使用…

基于SSM的游戏攻略管理系统

游戏攻略管理系统的构建与实现 一、系统概述二、系统架构与技术选型三、系统功能模块四、系统特点五、总结与展望 随着网络游戏的普及和发展&#xff0c;游戏攻略成为玩家们提升游戏技能、了解游戏机制的重要途径。为了更好地满足玩家需求&#xff0c;提高游戏攻略的管理效率和…

centos7离线安装postgresql13

**一.**安装存储库RPM yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm二.使用yumdownloader下载安装包 mkdir pg_yum cd pg_yum yumdownloader --resolve postgresql13-server**三.**上传rpm包到安…

Python的pytest框架(1)--基本概念、入门

按基础到进阶的顺序&#xff0c;学习Python的pytest框架&#xff0c;本篇文章先讲一讲pytest的基本概念、入门使用规则。 目录 一、pytest基础知识 1、安装 2、pytest框架主要做了什么工作 二、pytest的规则约定、运行方式以及参数详解 1、编写测试用例 模块&#xff08…