Files
logseq/pages/Netty 2.md

1.7 KiB
Raw Permalink Blame History

  • Java网络通信底层框架
  • 通过NIO多路复用机制实现单线程万个连接
  • 封装Selector/Channel/Buffer提供Pipeline责任链式API
  • 自带TCP粘包拆包、心跳检测、内存池
  • 性能
    • 基于NIO封装实现I/O多路复用
    • Linux下使用epoll模型
    • 使用零拷贝和堆外内存避免拷贝
    • 利用对象池进行对象复用
  • 扩展
    • 基于事件驱动模型将业务剥离为ChannelHandler利用责任链可以根据不同业务扩展
  • 线程处理
    • 非耗时操作
      • EventLoop直接处理
    • 阻塞操作
      • 提交到业务线程池
  • I/O模型
    • 同步阻塞BIO
    • 同步非阻塞NIO
    • IO多路复用
      • 只使用一个select注册需要监听的连接并管理连接数据是否就绪已经就绪就通知别的线程用read来读取数据
    • 信号驱动IO
    • 异步IO
      • 调用aio_read然后其他操作由内核完成内核完成后调用回调
  • 使用场景
    • 框架底层通信
    • 游戏行业处理大量并发连接
    • 通讯系统
    • 物联网,处理内设备数据的收集与下发
  • Reactor线程模型
    • 单Reactor单线程模型
    • 单Reactor多线程模型
    • 主从Reactor多线程模型
  • 零拷贝
    • FileRegion调用操作系统的sendfile函数直接将文件数据从文件系统发送到网络接口无须经过用户态内存
    • CompositeByteBuffer组合缓冲区将多个ByteBuffer组合成一个逻辑上的缓冲区不需要内存拷贝
    • ByteBuf通过堆外内存避免到JVM内存拷贝支持将字节数组包装为ByteBuf也可以通过slice将ByteBuf拆分为小ByteBuf
    • 内存映射文件,将文件映射到内存中,直接进行读取和写入,避免内存拷贝