上一篇【第81篇】Netty Codec框架源码解析——编解码器是如何设计的下一篇【第83篇】Netty任务队列MpscQueue源码解析——无锁高并发的秘密一、三指针设计unflushedEntry → [Msg1] → [Msg2] → [Msg3] → null (write后) ↑ tailEntry flushedEntry null addFlush() 后 flushedEntry → [Msg1] → [Msg2] → [Msg3] → null ↑ tailEntry unflushedEntry null二、核心源码// write()添加到队列publicvoidaddMessage(Objectmsg,intsize,ChannelPromisepromise){EntryentryEntry.newInstance(msg,size,promise);if(tailEntrynull){flushedEntrynull;tailEntryentry;}else{tailEntry.nextentry;tailEntryentry;}incrementPendingOutboundBytes(entry.pendingSize);}// addFlush()标记可写入范围publicvoidaddFlush(){flushedEntryunflushedEntry;unflushedEntrynull;}// doWrite()批量写入SocketprotectedvoiddoWrite(ChannelOutboundBufferin){intwriteSpinCountconfig().getWriteSpinCount();// 默认16for(intiwriteSpinCount;i0;i--){Objectmsgin.current();// 写入Socket...in.remove();// 移除已写完的Entry}}三、水位线// 超过高水位→不可写if(pendingBytes65536)setUnwritable();// 低于低水位→可写if(pendingBytes32768)setWritable();用途实现背压防止OOM。上一篇【第81篇】Netty Codec框架源码解析——编解码器是如何设计的下一篇【第83篇】Netty任务队列MpscQueue源码解析——无锁高并发的秘密
【Netty源码解读和权威指南】第82篇:ChannelOutboundBuffer源码深度解析——Netty写缓冲区的秘密
发布时间:2026/6/29 15:57:19
上一篇【第81篇】Netty Codec框架源码解析——编解码器是如何设计的下一篇【第83篇】Netty任务队列MpscQueue源码解析——无锁高并发的秘密一、三指针设计unflushedEntry → [Msg1] → [Msg2] → [Msg3] → null (write后) ↑ tailEntry flushedEntry null addFlush() 后 flushedEntry → [Msg1] → [Msg2] → [Msg3] → null ↑ tailEntry unflushedEntry null二、核心源码// write()添加到队列publicvoidaddMessage(Objectmsg,intsize,ChannelPromisepromise){EntryentryEntry.newInstance(msg,size,promise);if(tailEntrynull){flushedEntrynull;tailEntryentry;}else{tailEntry.nextentry;tailEntryentry;}incrementPendingOutboundBytes(entry.pendingSize);}// addFlush()标记可写入范围publicvoidaddFlush(){flushedEntryunflushedEntry;unflushedEntrynull;}// doWrite()批量写入SocketprotectedvoiddoWrite(ChannelOutboundBufferin){intwriteSpinCountconfig().getWriteSpinCount();// 默认16for(intiwriteSpinCount;i0;i--){Objectmsgin.current();// 写入Socket...in.remove();// 移除已写完的Entry}}三、水位线// 超过高水位→不可写if(pendingBytes65536)setUnwritable();// 低于低水位→可写if(pendingBytes32768)setWritable();用途实现背压防止OOM。上一篇【第81篇】Netty Codec框架源码解析——编解码器是如何设计的下一篇【第83篇】Netty任务队列MpscQueue源码解析——无锁高并发的秘密