Netty(1) -- IO演进之路

IO演进之路

  从JDK1.0到JDK1.3, Java的I/O类库都非常原始,很多UNIX网络编程中的概念或者接口在I/O类库中都没有体现,例如Pipe、Channel、Buffer和Selector等。2002年发布JDK1.4时,NIO正式发布。它新増了个java.nio包,提供了很多进行异步I/O开发的API和类库,至此,Java的网络编程得到了大大提升。

1、JDK1.4之前

  Java1.4之前的早期版本,Java所支持的IO就是我们平时一般指的IO----阻塞式IO。此时,Java对IO的支持并不完善,高性能服务器一般都是使用c++和c语言开发的。而阻塞式IO主要问题如下:

  1. 没有数据缓冲区,I/O性能存在问题;
  2. 没有Channel,只有输入流和输出流;
  3. 同步阻塞式I/O通信,在读写过程中通常会导致通信线程被长时间阻塞,极大地降低了性能;
  4. 高并发访问时,会产生大量线程,增大服务器的压力;
  5. 支持的字符集有限,硬件可移植性不好。

2、NIO的出现

  JDK1.4新増了java.nio包,极大地促进了基于Java的非阻塞编程的发展和应用。NIO提供了很多新的类和接口:

  1. 缓冲区ByteBuffer等buffer类;
  2. 管道Pipe;
  3. 通道Channel,包括ServerSocketChannel 和 Socketchannel;
  4. 多路复用器selector;
  5. 多种字符集的编码、解码能力;
  6. 文件通道FileChannel。

3、AIO的出现

  2011年7月28日,JDK1.7正式发布。它的一个比较大的亮点就是将原来的NIO类库进行了升级,被称为NIO2.0。NIO2.0由JSR.203演进而来,它主要提供了如下三个方面的改进:

  1. 提供能够批量获取文件属性的API,这些API具有平台无关性,不与特性的文件系统相耦合。另外它还提供了标准文件系统的SPI,供各个服务提供商扩展实现;
  2. 提供AIO功能,支持基于文件的异步I/O操作和针对网络套接字的异步操作;
  3. 完成JSR-51定义的通道功能,包括对配置和多播数据报的支持等。

此博客为读书笔记,参考书籍:《Netty权威指南》

有错误的地方敬请指出,欢迎大家评论区或者私信交流!每日持续更新Java、Python、大数据技术,请大家多多关注!

发布了64 篇原创文章 · 获赞 148 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Orange_minger/article/details/105072523
今日推荐