Java性能之优化RPC网络通信( 二 )

  • 主线程:用于客户端的连接请求操作,一旦连接建立成功,将会监听IO事件,监听到事件后会创建一个链路请求
  • 链路请求将会注册到负责IO操作的IO工作线程上,由IO工作线程负责后续的IO操作
  • Reactor线程模型解决了在高并发的情况下,由于单个NIO线程无法监听海量客户端和满足大量IO操作造成的问题
  • 4.串行设计
    • 服务端在接收消息之后,存在着编码、解码、读取和发送等链路操作
    • 如果这些操作基于并行实现,无疑会导致严重的锁竞争,进而导致系统的性能下降
    • 为了提升性能,Netty采用串行无锁化完成链路操作,提供了Pipeline,实现链路的各个操作在运行期间不会切换线程
    5.零拷贝
    • 数据从内存发到网络中,存在两次拷贝,先是从用户空间拷贝到内核空间,再从内核空间拷贝到网络IO
    • NIO提供的ByteBuffer可以使用Direct Buffer模式
    • 直接开辟一个非堆物理内存,不需要进行字节缓冲区的二次拷贝,可以直接将数据写入到内核空间
    6.优化TCP参数配置,提高网络吞吐量,Netty可以基于ChannelOption来设置