NIO(一)Channel Buffer Selector

Java NIO

针对学习并发编程网的资料进行总结
转载文章: 转载自并发编程网 – ifeve.com

NIO为什么性能比BIO高

  1. NIO面向缓冲区(Buffer),IO面向流(Stream),通过流读取时,数据从流上逐个读取,无法进行整体行为,而NIO通过操作缓冲区,可以进行更加便捷的数据偏移
  2. BIO是阻塞的,每处理一个事件需要一个线程,当一个线程无数据时,该线程阻塞;NIO则是操作管道,当管道内无数据时,线程会通过Selector操作另一个管道

组成

  • Channels
  • Buffers
  • Selectors

Channel

Java提供了TCP、UDP、网络IO和文件IO

  • FileChannel(文件)
  • DatagramChannel (UDP)
  • SocketChannel (TCP读取数据)
  • ServerSocketChannel (监听TCP连接,每一个新连接加入会创建一个SocketChannel

Buffer

数据可以从Channel写入到Buffer
也可以从Buffer读数据到Channel


Channel与Buffer.png

Buffer提供了基本数据类型

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

Selector

NIO单线程处理多个Channel,即一个Selector操作多个Channel。
向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。

你可能感兴趣的:(NIO(一)Channel Buffer Selector)