4.1.1.5. 4种io概念

4.1.1.5.1. 异步非阻塞I/O

早期的JDK1.7之前,的NIO框架称为异步非阻塞io,严格按照UNIX网络编程模式和JDK的实现进行区分只能叫做,非阻塞IO.使用多路复用技术,而并发异步。

1.7提供NIO2.0.新增了异步套接字通道,基于线程维护,回调相关的方法。所以称为异步IO.也叫AIO.

4.1.1.5.2. 多路复用器 Selector

JDKNIO使用的是多路复用器,核心是通过Selector来轮训注册在其上的channel,当发现某个或则多个Channel处于就绪状态后,从阻塞状态返回就绪的Channel的选择键集合,进行I/O操作

4.1.1.5.3. 伪异步IO

官方没有这种说法。为了解决Tomcat通信线程同步I/O 阻塞,导致业务IO被挂住的问题。 在通信线程和业务线程之间做一个缓冲区,这个缓冲区用于隔离IO线程和业务线程间的直接访问。

4.1.1.5. 特性对比:

- 同步阻塞I/O(BIO) 伪异步I/O 非阻塞I/O(NIO) 异步I/O(AIO)
客户端个数:I/O线程 1 : 1 M : N(其中M可大于N) M : 1(1个I/O线程处理多个客户端链接) M : 0(不需要启动额外的I/O线程,被动回调)
I/O类型(阻塞) 阻塞I/O 阻塞I/O 非阻塞I/O 非阻塞I/O
I/O类型(同步) 同步I/O 同步I/O 同步I/O(I/O多路复用) 异步I/O
API使用难度 简单 简单 非常复杂 复杂
调试难度 简单 简单 复杂 复杂
可靠性 非常差
吞吐量

4.1.1.5. 不选择Java原生NIO编程的原因

  1. nio类型和api繁杂。Selector,ServcrSocketChannel,SocketChannel,ByteBuffer
  2. 需要熟悉Java多线程,网络编程等
  3. 重连、网络闪断、半包读写、失败缓存、网络拥塞、异常码流处理等问题,都需要自己解决
  4. JDK NIO bug。epoll bug。导致Selector空轮(CPU上升到100%)询等问题。

4.1.1.5. 为什么选择Netty

很多商用项目在使用,如HadoopRPC框架Avro等。

4.1.1.5.1. 优点

  1. APi使用简单,开发门槛底
  2. 功能强大,预置多种编码功能,支持多种主流协议
  3. 定制能力强,可以通过ChannelHandler对通信框架进行灵活的扩展
  4. 性能高,通过与其他业界主流的NIO框架对比,Netty的综合性能最优
  5. 成熟、稳定,Netty修复了已经发现的所有JDK NIO BUG
  6. 社区活跃,版本迭代周期短。
  7. 经历了大规模的商业应用考验。在互联网、大数据、网络游戏、企业应用、电信软件等众多行业已经得到成功商用。
© All Rights Reserved            updated 2017-02-16 15:45:01

results matching ""

    No results matching ""