就io本身而言,概念上有5中模型:blocking I/O, nonblocking I/O, I/O multiplexing(select and poll), singal driven I/O, asynchronous I/O(the POSIX aio_functions)。
不同的操作系统对上述模型支持不同:unix支持I/O多路复用,不同系统叫法不同:freebsd里面叫kqueue;linux是epoll。而windows 2000的时候就诞生了IOCP支持最后一种异步I/O。
java为了支持异步I/O,诞生了noi,java 1.4引入的NIO 1.0是基于I/O复用的。在各个平台上会选择不同的复用方式:linux用的epoll,BSD上用kqueue,windows上应该是重叠I/O(肯定不是IOCP)。
NIO 2.0里终于有了AIO了,linux上用AIO,windows上用IOCP,都支持了概念上的最后一种IO--asynchronous I/O。
但是nio直接使用比较难用,所以有了mina,netty这些针对网络io部分(tcp/udp-传输层)的封装(nio也有非网络io部分),为了使nio更易用。
最后,很多人可能对tomcat、jetty、netty、mina容易弄混,再次谈谈他们的关系?
1.jetty和tomcat是同样的概念,是servlet容器,但是具体实现不同。
2.netty和mina是同样的概念,是socket框架,但是具体实现不同。
3.netty和mina属于NIO封装框架。tomcat和jetty使用了相关的技术。