NIO 总结

概述

 NIO其核心组件主要有Channel、Buffer、Selector

Channel

 NIO中主要的Channel子类有:

  • FileChannel
  • SocketChannel

Buffer

 Buffer实际上一个充当缓冲区的内存区域,Channel 从文件、网络中读取或写入数据的通道
 常用的Buffer类:File

  • position:对于写模式表示当前可写入的下一个位置;对于读模式则表示下一个可读取的位置
  • limit:对于写模式表示当前可写入的数组大小;对于读模式表示当前可读取的数组大小
  • capacity:表示当前数组的容量大小
    三者的相对关系:0 <= position <= limit <= capacity
    常用方法:
  • flip() :
  • allocate():
  • limit():

Selector

 Selector用于检测注册的channel是否有事件发生,如果检测到有事件发生,就去获取事件并处理发生的事件。每个Selector可以注册多个Channel,一个线程可以管理多个通道连接,只有当注册的Channel有事件发生时,才会去进行读写操作,大大减少了系统开销,而且不必为一个通道连接创建一个线程,不必去维护多线程,也减少了多进程上下文切换所产生的开销

优点

使用场景

  1. 常用的消息队列底层使用其进行通信,比如阿里开源的RocketMQ

BIO、NIO、AIO对比

posted @ 2021-08-26 20:57  枫叶艾辰  阅读(24)  评论(0编辑  收藏  举报