- 博客(10)
- 收藏
- 关注
原创 10.netty内存管理——PoolArena
PoolArena PoolArena成员介绍 PoolChunkList PoolChunkList实例化 PoolChunkList添加PoolChunk PoolChunkList移动PoolChunk PoolChunkList申请内存 PoolChunkList初始化 PoolArena申请内存 将申请内存规整化。 申请tiny、small级别的内存 申请normal级别的...
2020-02-08 08:51:46
1061
原创 9.PoolSubpage
PoolSubPage PoolSubPage初始化 初始化chunk等成员变量 计算最大poolSubpage数量 添加poolSubpage到PoolArena的双向链表中 PoolSubpage分配内存 找到对应PoolSubpage数组 找到subpage对应的索引值 初始化subpage 分配subpage级别的内存 初始化ByteBuf PoolSubPa...
2020-01-31 19:25:35
1039
原创 8.池化内存分配
netty内存管理思想 PooledByteBufAllocate PoolChunk Chunk初始化 PoolChunk分配内存 netty内存管理思想 java作为一门拥有GC机制的语言,长久以来它的使用者都不必手动管理内存,这比起c/c 是一个巨大的进步。但现在netty却反其道而行之,实现了一套不依赖GC而自行管理内存的机制。那么netty为什么要这么做?众所周知n...
2020-01-19 20:56:28
1385
原创 7.netty内存管理-ByteBuf
ByteBuf ByteBuf是什么 ByteBuf重要API read、write、set、skipBytes mark和reset duplicate、slice、copy retain、release ByteBuf扩容 ByteBuf种类 ByteBufAllocate UnPooledByteBufAllocate newHeapBuffer newDirectBuf...
2020-01-06 22:21:03
1307
原创 6.ChannelPipeline
pipeline和handler ChannelPipline ChannelHandler ChannelHandlerContext pipeline的初始化 handler的添加和删除 handler的传播顺序 inbount事件的传播 pipeline与context调用传播方法的区别 异常的传播 异常的传播路径 异常优雅处理 pipeline和handler...
2019-12-29 22:33:25
1087
原创 5.接入客户端连接
服务端发现新连接 循环读取read事件 将新连接交给pipeline处理 收尾工作 清除感兴趣事件 两种Channel的类比关系 感想 服务端发现新连接 在服务端启动过程中,ServerBootstrap通过反射的方式创建了一个NioServerSocketChannel,并且绑定了OP_ACCEPT感兴趣事件。启动之后,bossGroup中的NioEventLoop线程不断轮询...
2019-12-13 22:38:12
989
原创 4.Netty执行IO事件和非IO任务
回顾NioEventLoop的run方法流程 IO事件与非IO任务 处理IO事件 处理非IO任务 聚合定时任务到普通任务队列 从普通队列中获取任务 计算任务执行的超时时间 安全执行 计算是否超时 总结 回顾NioEventLoop的run方法流程 上文说到NioEventLoop的run方法可以分为3个步骤: 轮询channel中就绪的IO事件 处理轮询出的IO事件 处理...
2019-12-05 23:05:11
1483
原创 3.NioEventLoop的启动和执行
NioEventLoop启动和执行 NioEventLoop启动 在服务端启动的代码中,我们看到netty在注册和绑定时,判断了当前线程是否是NioEventLoop线程。如果不是,则将这些操作包装成一个任务丢到EventExecutor中来完成。 // 调用SingleThreadEventExecutor对象的execute方法 eventLoop.execute(() -> regi...
2019-11-27 20:54:14
1113
原创 2.NioEventLoop的创建
NioEventLoop的创建 NioEventLoop是netty及其重要的组成部件,它的首要职责就是为注册在它上的channels服务,发现这些channels上发生的新连接、读写等I/O事件,然后将事件转交 channel 流水线处理。使用netty时,我们首先要做的就是创建NioEventLoopGroup,这是一组NioEventLoop的集合,类似线程与线程池。通常,服务端会创建2个g...
2019-11-20 20:13:39
1003
原创 1.netty服务端的启动
服务端的创建 示例代码 netty源码中有一个netty-example项目,不妨以其中比较经典的EchoServer作为楔子。 // 步骤1 EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventLoopGroup(); final EchoServerHan...
2019-11-17 22:33:06
1110
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅