看了很多多路复用知识点,现在来简单的总结一下。
IOCP、POLL、EPOLL,这些都是操作系统层面的。
NIO是JAVA API,是根据不通操作系统来封装的。
Netty、VERT.X
同步和阻塞:
同步是这部分IO操作由Java自身来完成,非同步就是这部分IO操作由操作系统来代理完成;
阻塞就是所有IO操作都由一个线程来完成,不浪费资源;非阻塞就是有多少个连接就有多少个线程;
BIO是同步且阻塞,NIO是同步非阻塞,AIO(NIO2)是异步非阻塞;
BIO、NIO、NIO2(AIO)都是Java API,封装了底层操作系统细节;因此这也就是Java语言的特性之跨平台性;
至于Select、Poll、EPoll则是操作系统层面的多路复用技术;
但是这一API实际上也并不是很方便使用,因此就有了Netty;以及Vert.x;
所以可以简单的画一个流程图来形容这一过程,
OS(IOCP&POLL&EPOLL(LINUX, UNIX)) – BIO、NIO、AIO(NIO2)(Java7,JVM技术) – Netty(高性能网络通信框架,但只负责处理网络IO这一块) – Vert.x(和Netty相配合处理其他网络事件)
了解技术的历史是很有意思的事情,了解到因为需求的变更而发生技术的迭代是很有成就感的事情。因此呢,从一开始的源头进行了解则更能对技术的深度有一个清晰的把握。