
Netty
文章平均质量分 78
AnY11
这个作者很懒,什么都没留下…
展开
-
PooledByteBuf分配及回收之十六AdaptiveRecvByteBufAllocator源码解析
AdaptiveRecvByteBufAllocator 决定了要分配的ByteBuf的容量。RecvByteBufAllocatorpublic interface RecvByteBufAllocator { //创建一个新的句柄。句柄提供实际操作并保留内部信息,这是预测最佳缓冲区容量所必需的。 Handle newHandle(); @Deprecated interface Handle { //创建一个新的接原创 2021-02-20 16:26:43 · 409 阅读 · 0 评论 -
PooledByteBuf分配及回收之十五PooledByteBuf的回收
父类AbstractReferenceCountedByteBuf初始化属性 static final long REFCNT_FIELD_OFFSET ReferenceCountUpdater.getUnsafeOffset(AbstractReferenceCountedByteBuf.class, "refCnt") AbstractReferenceCountedByteBuf类refCnt属性的偏移量 stat..原创 2021-02-03 11:26:56 · 532 阅读 · 0 评论 -
PooledByteBuf分配及回收之十PoolChunkList源码解析
属性属性 含义 值 static final Iterator<PoolChunkMetric> EMPTY_METRICS 一个空的Iterator Collections.<PoolChunkMetric>emptyList().iterator() final PoolArena<T> arena PoolChunkList所属的PoolArena fi..原创 2021-02-03 09:55:21 · 288 阅读 · 0 评论 -
PooledByteBuf分配及回收之十四Recycler.Stack<T> 弹出对象
弹出对象 DefaultHandle<T> pop() { int size = this.size; //先判断size是否==0 if (size == 0) { //从WeakOrderQueue中扫出对象放入elements数组中 if (!scavenge()) { return null原创 2021-01-29 09:46:01 · 222 阅读 · 0 评论 -
PooledByteBuf分配及回收之十三Recycler.Stack<T> 压入对象
压入对象 void push(DefaultHandle<?> item) { Thread currentThread = Thread.currentThread(); if (threadRef.get() == currentThread) { // The current Thread is the thread that belongs to the Stack, we can tr原创 2021-01-29 09:09:08 · 280 阅读 · 0 评论 -
PooledByteBuf分配及回收之十二Recycler及基内部类初始化
Recycler属性属性 值 含义 static final Handle NOOP_HANDLE new Handle() { @Override public void recycle(Object object) { // NOOP }} static final AtomicInteger ID_GENERATOR new A..原创 2021-01-28 10:34:17 · 253 阅读 · 0 评论 -
PooledByteBuf分配及回收之十一ReferenceCountUpdater源码解析
对于更新的int字段:偶数=>“实际”引用计数为(refCnt >>> 1) 奇数=>“真实”引用计数为0(x&y)似乎相对于(x == y)昂贵。因此,此类在检查实时(偶数)引用计数时,在某些地方使用快速路径获取最常见的低值,例如:if (rawCnt == 2 || rawCnt == 4 || (rawCnt & 1) == 0) { ...构造方法与抽象方法protected ReferenceCountUpdater()...原创 2021-01-26 17:37:49 · 502 阅读 · 1 评论 -
PooledByteBuf分配及回收之九分配普通型PooledByteBuf(未命中缓存场景)
先看分配微小型PooledByteBuf(未命中缓存场景)PoolArena的allocate(PoolThreadCache cache, PooledByteBuf<T> buf, final int reqCapacity)方法 private void allocate(PoolThreadCache cache, PooledByteBuf<T> buf, final int reqCapacity) { final int normCa.原创 2021-01-24 12:08:24 · 245 阅读 · 0 评论 -
PooledByteBuf分配及回收之八分配小型PooledByteBuf(未命中缓存场景)
先看上一篇分配微小型PooledByteBuf(未命中缓存场景)小型Capacity 大于等于512 并且小于 8192(pageSize) ~(8192 - 1) == -8192小型与微小型的差别在于获取PoolSubpage的不同,小型是从PoolArena的smallSubpagePools数组中获取smallSubpagePools数组长度为4private void allocate(PoolThreadCache cache, PooledByteBuf<...原创 2021-01-24 12:08:56 · 235 阅读 · 0 评论 -
PooledByteBuf分配及回收之七分配微小型PooledByteBuf(未命中缓存场景)
微小型Capacity 小于512 Capacity & -512 == 0 代表微小型小型Capacity 大于512 并且小于 8192(pageSize) ~(8192 - 1) == -8192 Capacity & -8192 == 0 代表小型PooledByteBufAllocator的newDirectBuffer方法 @Override protected ByteBuf newDirectBuffer(int init...原创 2021-01-24 12:07:46 · 399 阅读 · 0 评论 -
PooledByteBuf分配及回收之六PooledUnsafeDirectByteBuf初始化
final class PooledUnsafeDirectByteBuf extends PooledByteBuf<ByteBuffer>PooledByteBuf的属性属性 含义 值 private final Handle<PooledByteBuf<T>> recyclerHandle 回收处理句柄 这里的T是ByteBuffer protected...原创 2021-01-24 12:10:03 · 6422 阅读 · 2 评论 -
PooledByteBuf分配及回收之五PoolSubpage初始化
属性属性 含义 值 final PoolChunk<T> chunk 所属chunk private final int memoryMapIdx 在chunk的memoryMap数组中的下标 通过下标能确认在memoryMap这个堆的哪个节点 private final int runOffset 相对于chunk offset的偏移量 标明...原创 2021-01-24 12:09:13 · 245 阅读 · 0 评论 -
PooledByteBuf分配及回收之四PoolChunk初始化
属性属性 含义 值 private static final int INTEGER_SIZE_MINUS_ONE 32-1 Integer.SIZE - 1 = 31 final PoolArena<T> arena 所属的区域 final T memory 申请的内存,根据HAS_UNSAFE的结果可分为ByteBuffer和byte[] ...原创 2021-01-24 12:09:33 · 323 阅读 · 0 评论 -
PooledByteBuf分配及回收之三PoolAerna初始化
属性含义及初始值 属性 含义 值 static final boolean HAS_UNSAFE 是否有UNSAFE PlatformDependent.hasUnsafe() static final int numTinySubpagePools 微小子页池中页的数量 512 >>> 4 也就是32 final PooledByteBufAllocator p.原创 2021-01-24 12:09:50 · 303 阅读 · 0 评论 -
PooledByteBuf分配及回收之二PoolThreadCache初始化
构造方法PoolThreadCache(PoolArena<byte[]> heapArena, PoolArena<ByteBuffer> directArena, int tinyCacheSize, int smallCacheSize, int normalCacheSize, int maxCachedBufferCapacity, int freeSweepAllocationThres原创 2021-01-24 12:10:32 · 301 阅读 · 0 评论 -
PooledByteBuf分配及回收之一PooledByteBufAllocator初始化
接口ByteBufAllocator中定义了一个默认的ByteBufAllocator DEFAULT =ByteBufUtil.DEFAULT_ALLOCATOR,跟进去:static final ByteBufAllocator DEFAULT_ALLOCATOR;static { //非安卓返回pooled String allocType = SystemPropertyUtil.get( "io.netty.allocator.type", ...原创 2021-01-24 12:10:48 · 1127 阅读 · 0 评论 -
Netty学习:EventExecutor
{@link EventExecutor}是一个特殊的{@link EventExecutorGroup},它提供了一些方便的方法来查看{@link线程}是否在事件循环中执行。除此之外,它还扩展了{@link EventExecutorGroup},以便提供一种访问方法的通用方法。EventExecutor next();返回对自身的引用。EventExecutorGroup parent...原创 2018-12-10 13:35:31 · 1120 阅读 · 0 评论 -
Netty学习:EventExecutorGroup
{@link EventExecutorGroup}负责通过其{@link #next()}方法提供{@link EventExecutor}的。除此之外,它还负责处理它们的生命周期,并允许在全局范围内关闭它们。boolean isShuttingDown();当且仅当由这个{@link EventExecutorGroup}管理的所有{@link EventExecutor}正在{@link...原创 2018-12-10 13:47:08 · 1360 阅读 · 0 评论 -
Netty学习:ChannelFuture
异步{@link Channel} I/O操作的结果。Netty中的所有I/O操作都是异步的。这意味着任何I/O调用都将立即返回,并且不能保证在调用结束时已完成所请求的I/O操作。相反,您将返回一个{@link ChannelFuture}实例,该实例将提供关于I/O操作的结果或状态的信息。一个{@link ChannelFuture}要么是<em>uncompleted<...原创 2018-12-10 15:54:16 · 919 阅读 · 0 评论 -
Netty学习:DefaultChannelPromise
默认的{@link ChannelPromise}实现。建议使用{@link Channel#newPromise()}创建一个新的{@link ChannelPromise},而不是显式调用构造函数。 Promise<V> setSuccess(V result);标志着这一future 的成功,并通知所有listeners。如果已经成功或失败,它将抛出{@link Ille...原创 2018-12-10 16:42:28 · 2896 阅读 · 0 评论 -
Netty学习:Channel及其内部接口Unsafe
连接到网络套接字或组件的一种连接,它能够进行I/O操作,如读、写、连接和绑定。通道为用户提供:通道的当前状态(例如是否打开?)它是连接吗?) 通道的{@linkplain ChannelConfig配置参数}(如接收缓冲区大小), 通道支持的I/O操作(例如读、写、连接和绑定) {@link ChannelPipeline}处理与通道关联的所有I/O事件和请求。所有I/O操作都是异...原创 2018-12-10 17:19:34 · 6980 阅读 · 1 评论 -
Netty学习:ChannelInboundInvoker
ChannelInboundInvoker fireChannelRegistered();一个{@link Channel}注册到它的{@link EventLoop}。这将导致{@link ChannelInboundHandler#channelRegistered(ChannelHandlerContext)}方法被调用,该方法调用的下一个{@link ChannelInboundHan...原创 2018-12-10 19:36:18 · 723 阅读 · 0 评论 -
Netty学习:ChannelOutboundInvoker
ChannelFuture bind(SocketAddress localAddress);请求绑定到给定的{@link SocketAddress},并在操作完成后通知{@link ChannelFuture},原因可能是操作成功,也可能是错误。这将导致{@link Channel}的{@link ChannelPipeline}中的下一个{@link ChannelOutboundHandl...原创 2018-12-10 20:05:24 · 1840 阅读 · 1 评论 -
Netty学习:ChannelHandlerContext及基实现类AbstractChannelHandlerContext
ChannelHandlerContext允许{@link ChannelHandler}与其{@link ChannelPipeline}和其他处理程序交互。处理程序可以通知{@link ChannelPipeline}中的下一个{@link ChannelHandler},还可以动态修改它所属的{@link ChannelPipeline}。通知通过调用这里提供的各种方法之一...原创 2018-12-10 20:06:16 · 1871 阅读 · 0 评论 -
Netty学习:ChannelHandler
处理I/O事件或拦截I/O操作,并将其转发给其{@link ChannelPipeline}中的下一个处理程序。子类型{@link ChannelHandler}本身并没有提供很多方法,但是您通常需要实现它的一个子类型:{@link ChannelInboundHandler}来处理入站I/O事件 {@link ChannelOutboundHandler}来处理出站I/O操作。另...原创 2018-12-10 21:42:59 · 246 阅读 · 0 评论 -
Netty学习:ChannelPipeline
一个{@link ChannelHandler}的列表,它处理或拦截{@link Channel}的入站事件和出站操作。创建管道 每个通道都有自己的管道,在创建新通道时自动创建管道。事件如何在管道中流动下图描述了在{@link ChannelPipeline}中{@link ChannelHandler}s如何处理I/O事件。I/O事件由{@link ChannelInboun...原创 2018-12-11 10:00:31 · 1656 阅读 · 0 评论 -
Netty学习一:官网文档翻译(4.x版本)
官网地址:https://netty.io/Netty是一个异步事件驱动的网络应用框架用于快速开发可维护的高性能协议服务器和客户端。Netty是一个NIO客户端服务器框架,它支持快速和容易地开发网络应用程序,如协议服务器和客户端。它极大地简化和流线型网络编程,如TCP和UDP套接字服务器。“快速和简单”并不意味着最终的应用程序将受到可维护性或性能问题的影响。Netty经过精心设计,积累...原创 2018-12-07 09:34:59 · 2689 阅读 · 0 评论