2.5.2 不同I/O模型对比

2014-07-09 13:01:13 · 作者: · 浏览: 141

2.5.2  不同I/O模型对比

不同的I/O模型由于线程模型、API等差别很大,所以用法的差异也非常大。由于之前的几个小节已经集中对这几种I/O的API和用法进行了说明,本小节会重点对这几种I/O进行功能对比。如表2-1所示。

表2-1  几种I/O模型的功能和特性对比

同步阻塞I/OBIO

伪异步I/O

非阻塞I/ONIO

异步I/OAIO

客户端个数:I/O线程

11

MN(其中M可以大于N

M11I/O线程处理多个客户端连接)

M0(不需要启动额外的I/O线程,被动回调)

I/O类型(阻塞)

阻塞I/O

阻塞I/O

非阻塞I/O

非阻塞I/O

I/O类型(同步)

同步I/O

同步I/O

同步I/OI/O多路复用)

异步I/O

API使用难度

简单

简单

非常复杂

复杂

调试难度

简单

简单

复杂

复杂

可靠性

非常差

吞吐量

尽管本书是专门介绍NIO框架Netty的,但是,并不意味着所有的Java网络编程都必须要选择NIO和Netty,具体选择什么样的I/O模型或者NIO框架,完全基于业务的实际应用场景和性能诉求,如果客户端并发连接数不多,周边对接的网元不多,服务器的负载也不重,那就完全没必要选择NIO做服务端;如果是相反情况,那就要考虑选择合适的NIO框架进行开发。

对比完Java的几种主流I/O模型之后,我们继续看下为什么要选择Netty进行NIO开发,而不是直接使用JDK的NIO原生类库。
 

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198