Netty权威指南_札记02_NIO编程

版权声明:士,不可以不弘毅,任重而道远 https://blog.csdn.net/superbeyone/article/details/83781228


1. NIO

NIO为非阻塞I/O(Non-block I/O)
与Socket类和ServerSocket类相对应,NIO也提供了SocketChannelServerSocketChannel两种不同的套接字通道实现,均支持阻塞和非阻塞两种模式。
对于高负载、高并发的网络应用,需要使用NIO的非阻塞模式进行开发。

2. NIO类库

2.1 缓冲区Buffer

在面向流的I/O中,可以将数据直接写入或者将数据直接读出到Stream对象中。
缓冲区实质上是一个数组,最常用的字节数组(ByteBuffer)。缓冲区提供了对数据的结构化访问以及维护读写位置(limit)的信息。
缓冲区包括:

  • ButeBuffer: 字节缓冲区
  • CharBuffer: 字符缓冲区
  • ShortBuffer: 短整型缓冲区
  • IntBuffer: 整型缓冲区
  • LongBuffer: 长整型缓冲区
  • FloatBuffer: 浮点型缓冲区
  • DubleBuffer: 双精度浮点型缓冲区

2.2 通道Channel

Channel是一个通道,网络数据通过Channel读取和写入。通道和流不同之处在于通道是双向的流是单向的
因为Channel是全双工的,可以比流更好的映射底层操作系统的API。
Channel可以分为两大类:

  • 用于网络读写的SelectableChannel
  • 用于文件操作的FileChannel

SocketChannelServerSocketChannel都是SelectableChannel的子类。

2.3 多路复用器Selector

多路复用器Selector是Java NIO编程的基础,多路复用器提供选择已经就绪的任务的能力。
Selector会不断的轮询注册在其上的Channel,如果某个Channel上面发生读或者写事件,这个Channel就处于就绪状态,会被Selector轮询出来,然后通过SelectionKey可以获取就绪Channel的集合,进行后续的I/O操作。
一个多路复用器Selector可以同时轮询多个Channel,由于JDK使用了epoll()代替传统的select实现,所以它并没有最大连接句柄1024/2048 的限制。这意味着只需要一个线程负责Selector的轮询,就可以接入成千上万的客户端。

猜你喜欢

转载自blog.csdn.net/superbeyone/article/details/83781228