Java IO NIO AIO

一、背景

JDK 1.4中的java.nio.*包中引入新的Java I/O库,其目的是提高速度。实际上,“旧”的I/O包已经使用NIO重新实现过,即使我们不显式的使用NIO编程,也能从中受益。官网nio应对的是New I/O,当然大家也把它翻译成 no-blocking io。

二、I/O与NI/O对比

引用网络图片:

三、核心组成

NIO主要有三个核心部分组成:

  • buffer缓冲区
  • Channel管道
  • Selector选择器

四、相关问题及笔记

1、NIO是否是绝对的非阻塞

NIO一个重要的特点是:socket主要的读、写、注册和接收函数,在等待就绪阶段都是非阻塞的,真正的I/O操作是同步阻塞的(消耗CPU但性能非常高)。

引用以下网络内容:

美团技术团队:Java NIO浅析​zhuanlan.zhihu.com图标

 

2、几个概念

  • IO(BIO)也就是传统的流式IO或叫同步阻塞IO
  • NIO new io或叫同步非阻塞IO
  • AIO 异步非阻塞IO

3、NIO非常优秀为什么没怎么看到被应用

  1. NIO的类库和API还是有点复杂,比如Buffer的使用
  2. Selector编写复杂,如果对某个事件注册后,业务代码过于耦合
  3. 需要了解很多多线程的知识,熟悉网络编程
  4. 面对断连重连、保丢失、粘包等,处理复杂
  5. NIO存在BUG,根据网上言论说是selector空轮训导致CPU飙升,具体有兴趣的可以看看JDK的官网
引用网络资源: 漫谈Java IO之 Netty与NIO服务器
这篇文章说的比较清楚

4、NIO的一些应用(一般应用于网络编程)

一些nio网络编程框架 mina netty

posted @ 2020-12-17 17:09  玄明hanko  阅读(135)  评论(0编辑  收藏  举报