Netty-tips 迷南。 2024-04-19 11:29 23阅读 0赞 NioEventLoop:1 select,2 处理select所得,3 处理任务(普通和定时,按ioRatio确定时间) read,accept和connect,write全部在这里处理,不像mina按Processor,Connector,Acceptor区分。 accept处理:和read处理完全一致,Unsafe.read() NioByteUnsafe(NioSocketChannel): read, 读数据,fireChannelRead NioMessageUnsafe(NioServerSocketChannel),accept,读(其实accept到SocketChannel),fireChannelRead,到ServerBootstrapAcceptor处将accet所得Channel注册到EventLoop 粘包、拆包:存在Nagle和Mss,考虑ByteToMessageDecoder,根据长度字段,固定长度,分隔符等拆分或拼装为应用层报文。 服务端:生成NioServerSocketChannel, 设置options和attrs,ServerBootstrapAcceptor等,注册到EventLoop,不关注任何事件,NioServerSocketChannel绑定某个地址,关注accept事件 客户端:connect和读写都在一个EventLoopGroup,不分开。 PooledByteBufAllocator:分配direct和heap的ByteBuf PoolArena:含Init(0-25),00(1-50),25(25-75),50(50-100),75(75-100),100(100)这6个PoolChunkList 初始在Init内,超过25进入00ChunkList,后面5个可来回移动,Init支持到0,即完全释放也不会回收,00回不到Init了,若在00内完全释放,则内存回收 PoolChunkList:含内存使用率上下限,ChunkList之间双向链接,持有头Chunk,相邻ChunkList的内存使用率重合,避免Chunk频繁来回移动 PoolChunk:Chunk之间双向链接,11层,2048个叶子节点,每个节点有个计数,如8层节点计数为8,则此节点可分配,为9则其有单个子节点被分配了,为12则已经完全被分配了 PoolSubPage:8k,bitmap(8个long,512位),最小可按16字节分配,在init时根据分配的大小来确定bitmap的使用长度,
还没有评论,来说两句吧...