Netty学习前的基础知识(二):传统I/O的缺陷及发展过程

背景

了解传统I/O的缺陷和I/O的发展过程。


基础知识
  1. I/O缺陷
    a) 没有数据缓冲区,I/O性能存在问题。

    b)没有C或者C++中的Channel概念,只有输入和输出流。

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

    d)支持的字符集有限,硬件移植性不好。

    在Java支持异步I/O之前的很长一段时间里,高性能服务端开发领域一直被C++和C长期占据。Java的同步阻塞I/O被大家所诟病。

  2. I/O发展
    a) JDK1.0到JDK1.3, Java的I/O类库都非常原始,很多UNIX网络编程中的概念或者接口在I/O类库中都没有体现,例如Pipe,Channel,Buffer和Selector等。基于Java的所有Socket通信都采用了同步阻塞模式(BIO),这种一请求一应答的通信模型简化了上层的应用开发,但是在性能和可靠性方面却存在着巨大的瓶颈。

    b)JDK1.4版本提供了新的NIO类库,支持非阻塞I/O了(BIO或AIO)。
    - 进行异步I/O操作的缓冲区ByteBuffer等
    - 进行异步I/O操作的管道Pipe
    - 进行各种I/O操作(异步或同步)的Channel,包括ServerSocketChannel和SocketChannel
    - 多种字符集的编码能力和解码能力
    - 实现非阻塞I/O操作的多路复用器selector
    - 基于流行的Perl实现的正则表达式类库
    - 文件通道FileChannel

    c)NIO依然有不完善的地方
    - 没有统一的文件属性(例如读写权限)
    - API能力比较弱,例如目录的级联创建和递归遍历,往往需要自己实现
    - 底层存储系统的一些高级API无法使用
    - 所有的文件操作都是同步阻塞调用,不支持异步文件读写操作。

    d) JDK1.7将原来的NIO类库进行了升级,被称为NIO2.0
    - 提供能够批量获取文件属性的API,这些API具有平台无关性,不与特性的文件系统相耦合。另外它还提供了标准文件系统的SPI,供各个服务提供商扩展实现。
    - 提供AIO功能,只基于文件的异步I/O操作和针对网络套接字的异步操作。
    - 完成JSR-51定义的通道功能,包括对配置和多播数据报的支持等。

小结
  1. 记录传统I/O的缺陷。
  2. 记录I/O的发展过程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值