Java I/O基础之I/O模型分类&I/O多路复用技术

 

1、早期Java I/O的缺陷

 

Java 1.4之前的早期版本,Java对I/O的支持并不完善,开发人员在开发高性能I/O程序的时候,会面临一些巨大的挑战和困难,主要问题如下:

(1) 没有数据缓冲区,I/O性能存在问题;

(2)没有C或者C++中的Channel概念,只有输入和输出流;

(3)同步阻塞式I/O通信(BIO),通常会导致通信线程被长时间阻塞;

(4)支持的字符集优先,硬件可移植性不好。

 

2、Linux网络I/O模型简介

 

 

根据UNIX网络编程对I/O模型的分类,UNIX提供了5中I/O模型,分别如下:

 

2.1、阻塞I/O(BIO)模型

 

 

2.2、非阻塞I/O(NIO)模型

 

 

2.3、I/O复用模型

 

 

2.4、信号驱动I/O模型

 

 

2.5、异步I/O(AIO)

 

 

3、I/O多路复用技术

 

在I/O编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者I/O多路复用技术进行处理。I/O多路复用技术通过把多个I/O的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线程/多进程模型比,I/O多路复用的最大优势是系统开销小,系统不需要创建新的额外进程或者线程,也不需要维护这些进程和线程的运行,降低了系统的维护工作量,节省了系统资源,I/O多路复用的主要应用场景如下。

  • 服务器需要同时处理多个处于监听状态或者多个连接状态的套接字;
  • 服务器需要同时处理多种网络协议的套接字。

 

  • 支持一个进程打开的socket描述符(FD)不受限制(仅受限于操作系统的最大文件句柄数)
  • I/O效率不会随着FD数目的增加而线性下降。因为epoll只对”活跃”的socket进行操作-这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的,那么,只有”活跃”的socket才会主动的去调用callback函数,其他idle状态的socket则不会。
  • 使用mmap加速内核与用户空间的消息传递。
  • epoll的API更加简单

 

参考:

《Netty权威指南》

JAVA BIO与NIO、AIO的区别(这个容易理解):https://blog.csdn.net/ty497122758/article/details/78979302

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值