网络IO模型和JAVA中的NIO
摘要本文系统梳理了IO相关的核心概念和面试要点。首先明确IO的定义和两个阶段准备与传输接着介绍五种网络IO模型BIO、NIO、IO多路复用、信号驱动IO、异步IO并辨析同步/异步、阻塞/非阻塞的区别。重点澄清了Java NIO与网络模型中NIO的概念差异详细讲解了Java NIO的三个核心组件Channel、Buffer、Selector及其与IO多路复用的关系。最后对比了select、poll、epoll三种多路复用实现机制以及水平触发LT与边缘触发ET的工作模式。一般在面试的时候面试官都提出常见的问题讲一下你对IO的理解IO模型有哪些IO多路复用是怎么实现的讲一下Java中的NIO这篇文章系统地梳理一下我对IO这块的理解。IO的定义IO指的就是数据的输入与输出包括网络IO、磁盘IO。只要是IO它都会被划分为2个阶段分别是数据的准备阶段和数据的传输阶段。前者指的是硬件资源如网卡、磁盘和内存缓冲区的数据传递后者指的是缓冲区和用户程序之间的数据传递。IO的网络模型网络IO模型划分为BIO、NIO、IO多路复用、信号驱动IO、异步IO。同步/异步 阻塞/非阻塞网络IO模型被划分为这5类之后请问哪些是同步/异步哪些是阻塞/非阻塞的呢同步/异步主线程是否需要主动地去获取数据的结果。可见处理异步IO是内核全权处理属于异步IO其余的都是同步IO。阻塞/非阻塞在数据准备阶段内核和硬件资源进行数据交互主线程是否阻塞、挂起。可见只有BIO是一开始就read()就挂起了其余都是非阻塞IO。NIO模型read()之后发现缓冲区数据为空于是直接返回通过反复轮询的方式读取线程不挂起。IO多路复用则是通过一个线程来管理多个请求、多个连接将连接封装成文件描述符让内核监听事件可读/可写并且循环调用方法获取就绪事件事件就绪之后才read()因此也不是一开始就挂起的。易错点Java中的NIOJava中的NIO对应网络模型中的IO多路复用网络模型中的NIO指的是通过轮询read()的方式做到不阻塞二者不是一个概念。面试官请你讲一下Java中的NIO吧答Java中的NIO指的是网络模型中的IO多路复用通过一个线程来管理多个请求、多个连接的建立。NIO的实现主要依赖3个组件Channel、Buffer、Selector。Channel是对IO资源的抽象类似文件描述符通过将多个Channel注册到Selector复用器上管理多个请求Buffer在资源读写的时候会用到。Selector复用器根据操作系统会有不同的实现poll、epoll、select。select、poll、epoll的区别poll和select是扫描模型内核需要通过遍历的方式判断哪些资源就绪并且是把所有文件描述符全量拷贝回用户空间用户程序需要再次扫描判断哪些事件就绪。select基于位图拷贝fd数值上限是1024poll基于数组拷贝无上限。epoll是事件驱动模型当进行事件注册的时候注册到红黑树结构上内核监听事件就绪后会移动至就绪队列只返回就绪事件。边缘触发水平触发LT水平触发默认只要fd处于就绪状态每次调用都会返回编程简单不怕漏读但可能重复触发ET边缘触发只在状态变化边缘触发一次效率高但要求必须一次性读完数据需配合非阻塞IO

相关新闻

从游戏直播看团队协作:如何避免决策摇摆与沟通失效

从游戏直播看团队协作:如何避免决策摇摆与沟通失效

那天晚上,我本来只是想随便找个游戏直播当背景音,结果点进一个标题极其“炸裂”的直播间,就再也没能退出来。标题里写着“屎隔多黏驴酱”、“双头食人魔”、“1级打野当场让人绷不住”,这些词堆在一起,像极了那种典型的…

2026/10/4 17:17:02 阅读更多 →
高性能压缩算法选型与优化实战指南

高性能压缩算法选型与优化实战指南

1. 为什么我们需要高性能压缩库?在数据爆炸式增长的今天,压缩技术已经成为现代计算不可或缺的基础设施。我曾在处理一个日志分析项目时,原始日志文件每天产生近1TB数据,使用常规压缩工具需要近8小时才能完成压缩,而切换…

2026/10/10 2:14:21 阅读更多 →
Workingset 检测机制与 Refault 分析

Workingset 检测机制与 Refault 分析

Workingset 检测机制与 Refault 分析 一、双 CLOCK 链表 每个 NUMA 节点维护 inactive 和 active 两个链表&#xff1a;fault ──────────────────────|-------------- | ------------- reclaim <- | inactive | <--- 降级 | …

2026/10/2 5:07:47 阅读更多 →

最新新闻

美赛各题型常见参考代码汇总:从微分方程到TOPSIS的快速实现

美赛各题型常见参考代码汇总:从微分方程到TOPSIS的快速实现

简介&#xff1a;这份资源面向参加美国大学生数学建模竞赛及国内数学建模赛事的选手&#xff0c;尤其适合需要快速调用成熟算法代码、补齐编程实现短板的中高年级本科生与研究生。包内按题型整理了从线性回归、时间序列到遗传算法改进神经网络等常见模型的参考实现&#xff0c;…

2026/10/12 16:02:24 阅读更多 →
大模型显存估算与量化实战:从公式到本地部署

大模型显存估算与量化实战:从公式到本地部署

1. 一切显存焦虑的根源&#xff1a;模型参数怎么换算成字节很多朋友第一次接触本地推理时&#xff0c;都有过类似的经历&#xff1a;看到一个能力不错的开源模型&#xff0c;兴奋地下载&#xff0c;启动之后推理框架报了个错&#xff0c;大意是"显存不足&#xff0c;无法分…

2026/10/12 16:02:24 阅读更多 →
2026年围棋赛事日程全解析:赛程结构与观赛指南

2026年围棋赛事日程全解析:赛程结构与观赛指南

2026年主要围棋赛事的日程&#xff0c;最近陆续在各大赛体系里露出轮廓了。每年这个时候&#xff0c;棋迷圈都会掀起一轮“赛程整理热”&#xff0c;有人拿日历逐个标注&#xff0c;有人守着官方通知蹲更新。今年这份排期比往年更满、更挤&#xff0c;年初就有多项国际赛事扎堆…

2026/10/12 16:02:24 阅读更多 →
DeepSeek V3 模型结构分析:MoE、MLA 与 MTP 的工程拆解与 TaoToken 接入验证

DeepSeek V3 模型结构分析:MoE、MLA 与 MTP 的工程拆解与 TaoToken 接入验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 16:02:24 阅读更多 →
Vue3 组件开发实战:从设计思路到性能优化的完整指南

Vue3 组件开发实战:从设计思路到性能优化的完整指南

做 Vue3 组件开发这两年&#xff0c;我在实际项目里把从组件设计、组合式 API、响应式细节到性能优化的坑几乎踩了一遍。很多人以为学会了<script setup>和ref就等于会写组件&#xff0c;等到了多人协作、跨页面复用的项目里&#xff0c;组件拆得稀碎、通信满天飞、性能问…

2026/10/12 16:02:24 阅读更多 →
蓝桥杯备赛实录:动态规划与图论刷题踩坑总结

蓝桥杯备赛实录:动态规划与图论刷题踩坑总结

这是一篇实战向的备赛记录整理。我直接按这段时间的真实刷题节奏来写&#xff0c;覆盖了题型复盘、动态规划常见变体、图论易错点、踩坑记录和后续计划&#xff0c;内容都是可复现的&#xff0c;希望对正在准备算法竞赛的朋友有帮助。 1. 这一阶段的刷题复盘&#xff1a;题型…

2026/10/12 16:01:23 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天&#xff0c;画面可以做到绝对的锐利、平滑与无瑕。然而&#xff0c;当一张秋日手账插画或拍立得照片过于“平整无瑕”时&#xff0c;往往会散发出一种冰冷生硬的“数码塑料感&#xff08;Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中&#xff0c;横排&#xff08;Horizontal Layout&#xff09;早已经成为了绝对的主流。然而&#xff0c;当我们翻开泛黄的线装古籍、宋版木刻诗集&#xff0c;或是欣赏一张茶道雅集的手写便签时&#xff0c;那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点&#xff0c;很多人心里都会悄悄亮起一盏警示灯。 在心理学上&#xff0c;这种现象有一个专门的称谓——“周日夜晚焦虑症&#xff08;Sunday Scaries&#xff09;”。明天又是周一&#xff0c;闹钟又要重新在七点响彻卧房&#xff1b;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →