最近在阅读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.csdn.net/bwh0520/article/details/82598269