java NIO是NEW IO的简称,它是一种可以替代javaIO的一套新的IO机制。它提供了一套不同java标准IO的操作机制。严格来说,NIO与并发并无直接关系。但是,使用NIO可以大大提高线程的使用效率。
java NIO中涉及的基础内容有通道和缓冲区、文件IO和网络IO。
对于标注的网络IO来说,我们会使用socket进行网络的读写。为了让服务器可以支持更多的客户端连接,通常的做法是为每个客户端连接开启一个线程。
要了解NIO,我们首先要知道在NIO中的一个关键组建Channel(通道)。Channel有点类似于流,一个Channel可以和文件或者网络Socket对应,如果Channel对应着一个Socket,那么往这个Channel中写数据,就等同于向Socket中写入数据。
另外一个与Channel密切相关的Selector,在Channel的众多实现中,有一个SelectortableChannel实现,表示可被选择的通道。任何一个SelectableChannel都可以将自己注册到一个Selector中,这样,这个Channel就能被Selector所管理。而一个Selector可以管理多个SelectableChannel。当SelectableChannel的数据准备好时,Selector就会接到通知,得到那些已经准备好的数据。而SocketChannel就是SelectableChannel的一种。
一个Selector可以由一个线程进行管理,而一个SocketChannel则可以表示一个客户端连接,因此就构成由一个或者极少数线程,来处理大量客户端连接的结构。当与客户端连接的数据没有准备好时,Selector会处于等待状态(不过幸好,用于管理Selector的线程数是极少量的),而一旦有任何一个SocketChannel准备好了数据,Selector就能立即得到通知,获取数据进行处理。

jxspring
3 声望2 粉丝