最近在阅读netty相关的书籍和代码,根据自己的理解作下述汇总和图示。
一. Netty基础:mmap和directBuffer

DirectBuffer:直接使用用户态(堆外内存)与内核态传递数据,省略了用户态(堆内内存)和用户态(堆外内存)之间的数据传递;
mmap:用户态和内核态共用磁盘缓冲区作为公共虚拟内存,省略了用户态和内核态之间的数据传递;
二. Netty对NIO的API进行了封装,作以下性能提升点
1. 使用多路复用技术,提高处理连接的并发性
2. 零拷贝-Netty的接收和发送数据采用DIRECT BUFFERS,使用堆外直接内存进行Socket读写,不需要进行字节缓冲区的二次拷贝
3. Netty提供了组合Buffer对象,可以聚合多个ByteBuffer对象进行一次操作
4. 内存池:为了减少堆外直接内存的分配和回收产生的资源损耗问题,Netty提供了基于内存池的缓冲区重用机制
5. 使用主从Reactor多线程模型,提高并发性
6. 采用了串行无锁化设计,在IO线程内部进行串行操作,避免多线程竞争导致的性能下降
7. 默认使用Protobuf的序列化框架
可结合下述Netty框架图理解上述性能提升点
三. netty的NIOEventLoopGroup源码执行流程图
转自 https://blog.youkuaiyun.com/bwh0520/article/details/82598269

本文深入探讨Netty框架的性能提升策略,包括多路复用、零拷贝、DirectBuffers、内存池机制、主从Reactor模型、串行无锁设计及序列化框架的运用,同时解析NIOEventLoopGroup的源码执行流程。
2319

被折叠的 条评论
为什么被折叠?



