当前位置: 首页 > news >正文

【BIO、NIO、AIO的区别?】

1. 阻塞与非阻塞

  • BIO (Blocking I/O)
    同步阻塞模型,线程发起读写请求后必须等待操作完成。例如当调用InputStream.read()时,线程会阻塞直到数据就绪。

  • NIO (Non-blocking I/O)
    同步非阻塞模型,通过Selector实现事件驱动机制。线程可以通过轮询方式检查多个通道的就绪状态,当没有就绪事件时,线程可执行其他任务。

  • AIO (Asynchronous I/O)
    异步非阻塞模型,采用回调机制。线程发起读写请求后立即返回,操作系统完成IO操作后通过回调函数通知应用程序。

2. 缓冲区设计

  • BIO
    基于流式处理,直接操作字节流或字符流:

    InputStream in = socket.getInputStream();
    int data = in.read(); // 直接从流中读取
    
  • NIO
    强制使用Buffer进行块数据传输,提供堆内外内存支持:

    ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
    channel.read(buffer); // 数据先写入缓冲区
    
  • AIO
    通过CompletionHandler实现零拷贝优化,操作系统直接管理数据缓冲区。

3. 线程模型对比

模型线程消耗适用场景
BIO1:1 (连接:线程)低并发短连接(<1000)
NIOM:N (多路复用)高并发短连接(如聊天服务器)
AIO1:M (事件回调)高并发长连接(如文件服务器)

4. 性能指标

  • 吞吐量
    T N I O ≈ 3 × T B I O ( 千兆网络环境 ) T_{NIO} \approx 3 \times T_{BIO} \quad (千兆网络环境) TNIO3×TBIO(千兆网络环境)
    T A I O ≥ 1.5 × T N I O ( L i n u x e p o l l 实现 ) T_{AIO} \geq 1.5 \times T_{NIO} \quad (Linux epoll实现) TAIO1.5×TNIO(Linuxepoll实现)

  • 延迟特性

    • BIO:固定延迟(受线程切换影响)
    • NIO:波动延迟(受事件轮询间隔影响)
    • AIO:稳定低延迟(依赖操作系统优化)
架构选择建议
  1. 传统Web应用:NIO(Netty框架)
  2. 大文件传输:AIO(JDK7+)
  3. 遗留系统维护:BIO(兼容旧协议)

相关文章:

  • 05 接口自动化-框架封装思想建立之httprunner框架(中)
  • 目标检测DINO-DETR(2023)详细解读
  • 海康工业相机白平衡比选择器对应的值被重置后,如何恢复原成像
  • 【Code】Foundations 2017- Catalogue, List of Tables, List of Figures
  • iOS Runtime与RunLoop的对比和使用
  • Journal of Real-Time Image Processing 投稿过程
  • 区域双碳治理:数据驱动与系统破局之道
  • 2.4.1死锁的概念
  • 计算机网络通信技术与协议(七)———关于ACL的详细解释
  • 迪菲-赫尔曼密钥交换算法深度解析
  • 重构研发效能:项目管理引领软件工厂迈向智能化
  • 第二届帕鲁杯screenshot
  • 【Linux】第二十一章 管理存储堆栈
  • 三视图dxf 生成brep 3d图重建 pythonocc solid
  • 适合初学者的机器学习路线图
  • SpringBootDay1|面试题
  • NC65联查单据问题总结
  • 电子电路:什么是射极电阻?
  • 汉语词汇的神奇拼图:关联性的魅力
  • C++数据结构——红黑树
  • 秦洪看盘|热门股或将退潮,短线波动难免
  • 上影节开幕影片《酱园弄·悬案》,陈可辛执导,章子怡主演
  • 钟南山谈新冠阳性率升高:可防可治不用慌,高危人群应重点关注
  • 海南医科大披露校内竞聘上岗结果:32名干部离开领导岗位,8人系落选
  • 俄方确认普京与特朗普将于今晚通话
  • 广东茂名高州市山体滑坡已致3死1失联,搜救仍在继续