首页 > 基础资料 博客日记
Java BIO,NIO最真实简单的理解
2026-04-20 11:30:02基础资料围观2次
文章Java BIO,NIO最真实简单的理解分享给大家,欢迎收藏极客资料网,专注分享技术知识
BIO就是阻塞的,NIO就是非阻塞?BIO就是堆内存,NIO就是直接内存?用了NIO就高并发,难道是银弹?
NONONO
当然不是!
我们不讲具体技术及名词,存讲概念,把什么是B/NIO理解清楚了,网上的文章太多概念模糊,太千篇一律(也许是我个人一直没怎么深入IO相关开发,最近搞netty,才逐渐将概念清晰,深刻)。
第一,BIO和NIO不是一整套开发技术或者流程,它只是两种IO交互概念
这么说是不是也很笼统,不急,现在就给定义:
- BIO:面向流 Stream(单向读写)
- NIO:面向通道 Channel + 缓冲区 Buffer
嘿,这不是和网上一样吗?没错,再给:
BIO,你就理解,操作系统给你一块内存缓冲,你每次都去查看有没有新数据,有你就搬运,没有你就阻塞等待一会再去查看。
NIO,channel你就理解为句柄和触发器,缓冲区buffer,你就理解为和BIO一样的内存缓冲,它和BIO区别就在于,你不需要主动去查看缓冲,而是触发器触发有数据可以读取了,这就是事件驱动。至于,你的线程要不要等待,还是去做其他事,这就看你想要的了。 回答了开头,NIO既可以是阻塞的,也可以是非阻塞。
第二,内存缓冲 只是块内存,在Java中它没有BIO和NIO之分,只有堆内存还是直接内存的区别。
好理解吧,BIO读取的数据也可以写入直接内存(通过NIO的api),NIO堆内存和直接内存都可以写入,就看你选哪块。
额外强调:现代 JDK(JDK8+)的 DirectByteBuffer 早就做了 JNI 内联优化,老教程吹的「直接内存 JNI 调用慢、频繁用户态内核切换」已经过时了。HotSpot JIT 把直接内存的读写操作内联消除了 JNI 桩,日常读写直接内存几乎没有额外开销,不会频繁切内核。
最后一个问题 NIO就一定快?
不一定哦,看场景,底层基础设施是阻塞的,用了NIO除了IO方式变化了,性能不一定能提升多大,比如数据库,它慢,上层再快有什么用。
而且还有个误区,NIO只是并发能力高了,你底层耗cpu,耗内存等情况,并发能力再高,实际能处理的能力不高,也没用。
文章来源:https://www.cnblogs.com/aoeiuv/p/19893874
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- Zed AI 白嫖免费模型,搭配 DeepSeek v4,玩转 Agent 编程技巧
- 当漏洞来了,你知道系统里用了什么吗?——SBOM 的真正价值
- FastAPI 后台任务:BackgroundTasks 的使用场景与注意事项
- 为什么 SSR 一定会有 hydration mismatch?
- 用VC6 App调用第三方Java WebService后的结果字符串乱码问题的解决!
- 谈谈一款 .NET 客服系统是如何建立客户信任的
- 深度学习如何重塑三维重建:从任务定义到工程落地全流程解析
- Redis--SDS字符串与集合的底层实现原理
- 从 ChatBI 到 Data Agent:企业数据分析产品走过的弯路和新方向
- 为什么 React 和 Vue 不一样?

