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

发布时间:2026/6/25 20:02:53
BIO就是阻塞的,NIO就是非阻塞?BIO就是堆内存,NIO就是直接内存?用了NIO就高并发,难道是银弹? 第一BIO和NIO不是一整套开发技术或者流程它只是两种IO交互概念这么说是不是也很笼统不急现在就给定义BIO面向流 Stream单向读写NIO面向通道 Channel 缓冲区 Buffer嘿这不是和网上一样吗没错再给BIO你就理解操作系统给你一块内存缓冲你每次都去查看有没有新数据有你就搬运没有你就阻塞等待一会再去查看。NIOchannel你就理解为句柄和触发器缓冲区buffer你就理解为和BIO一样的内存缓冲它和BIO区别就在于你不需要主动去查看缓冲而是触发器触发有数据可以读取了这就是事件驱动。至于你的线程要不要等待还是去做其他事这就看你想要的了。 回答了开头NIO既可以是阻塞的也可以是非阻塞。第二内存缓冲 只是块内存在Java中它没有BIO和NIO之分只有堆内存还是直接内存的区别。好理解吧BIO读取的数据也可以写入直接内存通过NIO的apiNIO堆内存和直接内存都可以写入就看你选哪块。额外强调现代 JDKJDK8的 DirectByteBuffer 早就做了 JNI 内联优化老教程吹的「直接内存 JNI 调用慢、频繁用户态内核切换」已经过时了。HotSpot JIT 把直接内存的读写操作内联消除了 JNI 桩日常读写直接内存几乎没有额外开销不会频繁切内核。最后一个问题 NIO就一定快不一定哦看场景底层基础设施是阻塞的用了NIO除了IO方式变化了性能不一定能提升多大比如数据库它慢上层再快有什么用。而且还有个误区NIO只是并发能力高了你底层耗cpu耗内存等情况并发能力再高实际能处理的能力不高也没用。