Java IO模型
很多人喜欢将 JDK 1.4 提供的 NIO 框架称为异步非阻塞 I/O,但是,如果严格按照 UNIX 网络编程模型和 JDK 的实现进行区分,实际上它只能被称为非阻塞 I/O,不能叫异步非阻塞 I/O。在早期的 JDK 1.4 和 1.5 update10 版本之前,JDK 的 Selector 基于 select/poll 模型实现,它是基于 I/O 复用技术的非阻塞 I/O,不是异步 I/O。在 JDK 1.5 update10 和 Linux core2.6 以上版本,Sun 优化了 Selctor 的实现,它在底层使用 epoll 替换了 select/poll,上层的 API 并没有变化,可以认为是 JDK NIO 的一次性能优化,但是它仍旧没有改变 I/O 的模型。
由 JDK1.7 提供的 NIO 2.0 新增了异步的套接字通道,它是真正的异步 I/O,在异步 I/O 操作的时候可以传递信号变量,当操作完成之后会回调相关的方法,异步 I/O 也被称为 AIO。NIO 类库支持非阻塞读和写操作,相比于之前的同步阻塞读和写,它是异步的,因此很多人仍然习惯于称 NIO 为异步非阻塞 I/O,在此不需要太咬文嚼字。
不同的 I/O 模型由于线程模型、API 等差别很大,所以用法的差异也非常大。各种 I/O 模型的优缺点对比如下:
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wshten@gmail.com
文章标题:Java IO模型
本文作者:KevinTen
发布时间:2019-09-15, 00:00:00
最后更新:2019-09-15, 17:41:59
原始链接:http://github.com/kevinten10/2019/09/15/Java/io/Java-IO模型/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。