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()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。