Java NIO 简述

   Java NIO 由三个核心组件构成:Selector (选择器), Channel(通道) , Buffer (缓冲区)。 虽然NIO体系还是有其它组件,比如:PipeFileLock等 它们只是与三个组件结合实际使用类。

    三者关联关系:

一个线程对应一个selector, 一个selector 对应多个channel。 多个通道中可以相互切换,是根据事件event来决定使用那个channel。

  单线程处理多通道的好处,处理通道所需要的线程数更少。一个线程可以处理所有的通道。在操作系统层面,线程的上下文切换是成本非常高。每个线程都会对应操作系统的内存。因此,线程数越少越好。

  但随着CPU技术突破,多核超线程出现,若使用单线程来处理,有点浪费cpu资源。

  channel是指可以向其写入数据或读取数据的对象。 类似于IO中的strem。但是所有数据的读写都由buffer来进行的,channel不进行任何处理。

  一个stream只能是InputStream或者OutputStream。但channel是双向的,channel打开后,即可向其写入数据,也可以同时读取数据。

  buffer本身就是一块内存,底层使用数组来实现。buffer非线程安全,因此,在多线程并发的环境下,当访问buffer时,需要做适当的线程控制。

原文地址:https://www.cnblogs.com/song27/p/13160712.html