I/O多路复用
一个线程,通过记录I/O流的状态来同时管理多个I/O,可以提高服务器的吞吐能力 。 就像下面这张图的前半部分一样,中间的那条线就是我们的 单个线程 ,它通过记录传入的每一个I/O流的状态来同时管理多个IO。 multiplexing NIO同步非阻塞式IO 对比 BIO的同步阻塞IO操作 ,实际上NIO是同步非阻塞IO,一个线程在同步的进行轮询检查,Selector不断轮询注册在其上的Channel,某个Channel上面发生读写连接请求,这个Channel就处于就绪状态,被Selector轮询出来,然后通过SelectionKey可以获取就绪Channel的集合,进行后续的I/O操作。 同步和异步说的是消息的通知机制,这个线程仍然要定时的读取stream,判断数据有没有准备好,client采用循环的方式去读取(线程自己去抓去信息),CPU被浪费。 非阻塞:体现在,这个线程可以去干别的,不需要一直在这等着。Selector可以同时轮询多个Channel,因为JDK使用了epoll()代替传统的select实现,没有最大连接句柄限制。所以只需要一个线程负责Selector的轮询,就可以接入成千上万的客户端。 AIO 是在NIO的基础上引入异步通道的概念,实现 异步非阻塞式的IO处理 。 AIO不需要通过多路复用器对注册的通道进行轮询操作即可实现异步读写。什么意思呢?