为什么说 AIO 受”误解“,虽然这个”误解“被打上了双引号,但还是不得不承认它的发展状况并不好。AIO 是 Java 7 开始提供的新特性,而这个”新特性“到如今都成了陈年老酒还鲜有人去品味它。要知道 Java 7 可是在 2011年7月份发布的,市面上基于 AIO 实现的通信框架竟然寥寥无几,关于这项技术的介绍文章也普遍比较粗略。通过阅读那些介绍 AIO 的文章,似乎从学术层面大家就不怎么待见这项技术。
作为 AIO 的学习者、受益者,我觉得有必要先对网上的一些 ”偏见“ 表达一下自己的观点。如果能有幸在认知上搭成共识,之后的学习交流会更加顺畅一点。通常偏见源于比较,AIO 与 BIO、NIO 的对比明细如表所示。
BIO | NIO | AIO | |
---|---|---|---|
客户端 : I/O 线程数 | 1 : 1 | N : 1 | N : 0 |
I/O类型 | 同步阻塞 | 同步非阻塞 | 异步非阻塞 |
API使用难度 | 简单 | 复杂 | 一般 |
调试难度 | 简单 | 复杂 | 一般 |
可靠性 | 差 | 高 | 高 |
吞吐量 | 低 | 高 | 高 |
适用场景 | 适用于连接数量不多,并发量不高的场景。充分发挥易编程的优势。 | 适用于对连接数量以及稳定性、实时性有较高要求的场景,采用 |