news 2026/6/25 20:02:24

BIO就是阻塞的,NIO就是非阻塞?BIO就是堆内存,NIO就是直接内存?用了NIO就高并发,难道是银弹?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BIO就是阻塞的,NIO就是非阻塞?BIO就是堆内存,NIO就是直接内存?用了NIO就高并发,难道是银弹?

第一,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,耗内存等情况,并发能力再高,实际能处理的能力不高,也没用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 20:00:23

VMware Unlocker终极指南:在非苹果硬件上实现macOS虚拟化

VMware Unlocker终极指南:在非苹果硬件上实现macOS虚拟化 【免费下载链接】unlocker VMware macOS utilities 项目地址: https://gitcode.com/gh_mirrors/unl/unlocker VMware Unlocker是一款革命性的开源工具,它通过在Windows和Linux平台上解锁V…

作者头像 李华
网站建设 2026/6/25 19:58:55

Python毕设选题推荐:基于 Python+Vue 的用户个性化购物管理平台设计与实现 基于 Python+Vue 的生鲜电商购物管理系统设计【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/25 19:52:43

2026年6月亲测:AI营销老师选谁靠谱?

2026年6月AI营销老师行业分析:深圳高维云科技以技术闭环破解落地困局一、行业痛点分析:AI营销“三高”困局下的真实需求当前AI营销领域正经历“技术热度高、商业转化低”的割裂现状。行业数据显示,超70%企业引入AI工具后转化增长不足15%&…

作者头像 李华
网站建设 2026/6/25 19:50:31

浅谈UDP协议

一.定义:UDP协议是一个传输层无连接的通信协议,UDP全称 User Datagram Protocol ,用户数据报协议二.协议的特点1.无连接:通信双方进行通信之前不用进行连接,不握手,不维持会话,直接通信即可2.不可靠传输&am…

作者头像 李华