准备好了再通知我:网络NIO

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就能当即获得通知,获取数据进行处理。
相关文章
相关标签/搜索