Netty学习笔记
lmkbuffon
永言配命,自求多福
展开
-
Netty学习笔记通信调度篇:Reactor线程模型
目录Reactor模型单线程模型多线程模型主从多线程模型示例代码Reactor模型Netty中的Reactor模型主要由多路复用器(Acceptor)、事件分发器(Dispatcher)、事件处理器(Handler)组成,可以分为三种。单线程模型所有I/O操作都由一个线程完成,即多路复用、事件分发和处理都是在一个Reactor线程上完成的。对于一些小容量...原创 2019-08-12 15:59:49 · 390 阅读 · 0 评论 -
Netty学习笔记通信调度篇:NioEventLoop源码解读
目录初始化过程Netty对Selecter的优化注册channel过程NioEventLoop的任务处理机制run 方法实现select处理就绪事件runAllTasks处理非I/O任务。NioEventLoop 继承于 SingleThreadEventLoop, 而 SingleThreadEventLoop 又继承于 SingleThreadEventEx...原创 2019-08-12 16:01:11 · 537 阅读 · 0 评论 -
Netty学习笔记通信调度篇:上层接口源码解析
我们按继承关系解析一下出现在这张图中的类目录EventExecutorGroupIterableEventExecutorAbstractEventExecutorGroupAbstractEventExecutorEventExecutorGroup先看一下接口内部定义的方法public interface EventExecutorGroup e...原创 2019-08-12 16:00:20 · 436 阅读 · 0 评论 -
Netty学习笔记通信调度篇:NioEventLoopGroup源码分析
目录NioEventLoopGroup类层次结构MultithreadEventExecutorGroupEventExecutorChooserFastThreadLocalRunnable在创建主从Reactor多线程模型的Netty服务端时,服务端的代码如下: EventLoopGroup bossGroup = new NioEventLoopGro...原创 2019-08-12 16:00:02 · 569 阅读 · 0 评论 -
Netty学习笔记内存管理篇:AbstractByteBuf分析
目录writeBytes(byte[] src)readBytes(byte[] dst)discardReadBytes()AbstractByteBuf是ByteBuf的第一个子类,这个类定义了一些公共属性(如下),这些公共属性包括:读索引、写索引、mark以及最大容量等。 public abstract class AbstractByteBuf extends ...原创 2019-08-12 16:01:00 · 741 阅读 · 0 评论 -
Netty学习笔记内存管理篇:ByteBuf
ByteBuf主要功能类继承关系图目录内部格式ByteBuf的四种声明方式ByteBuf与Java NIO ByteBuffer类似,由于ByteBuffer存在一定的缺陷,具体缺陷如下:1)ByteBuffer长度固定,一旦分配,则容量不能动态扩展和收缩2)ByteBuffer只有一个标识位置的指针,读写的时候需要手动的调用flip()方法来进行从写到读模式的切换,否则...原创 2019-08-12 16:01:21 · 478 阅读 · 0 评论 -
Netty学习笔记内存管理篇:Netty内存池管理
目录Netty内存池设计思路内存池结构PoolArenaPoolChunkPoolChunkListPoolPagePoolSubpage本地线程存储对象池内存释放内存泄露检测Handler中的内存处理机制Netty内存池创建堆外内存的速度比堆内存慢了10到20倍,为了解决这个问题Netty就做了内存池,Netty的内存池是不依赖于JVM...原创 2019-08-12 16:45:17 · 3465 阅读 · 0 评论 -
Netty学习笔记内存管理篇:直接内存和堆内存
目录直接内存和堆内存堆内存直接内存(堆外内存)零拷贝NIO原生直接内存直接内存的GCNetty的直接内存在介绍Netty的内存管理前,先简单了解一下直接内存和堆内存直接内存和堆内存jvm中使用的内存可分为两种,一个是堆内存,一个是直接内存。堆内存(HeapByteBuf)字节缓冲区:特点是内存的分配和回收速度快,可以被JVM自动回收;缺点就是如果进行So...原创 2019-08-12 16:00:44 · 5502 阅读 · 2 评论 -
Netty学习笔记内存管理篇:内存分配ByteBufAllocator
此接口来进行实际的内存分配,默认使用的是ByteBufAllocator.DEFAULT,初始化时会根据配置和平台进行赋值。io.netty.allocator.type可以设置为unpooled和pooled指定是否需要缓冲池,如果不设置则会根据平台判断。逻辑如下:static { String allocType = SystemPropertyUtil.get( ...原创 2019-08-12 17:22:53 · 2750 阅读 · 0 评论