
Netty
文章平均质量分 80
Song_Russell
这个作者很懒,什么都没留下…
展开
-
Netty启动过程分析
在介绍基于NIO Netty服务器启动过程之前,先来说说其相应的核心模块:引导类(ServerBootstrap,BootStrap)线程池(NioEventGroupLoop异步IO)Channel(与JAVA NIO中Channnel类似)ChannelPipeline(与Channel对应的流水线)Handler(Channel中可以指定相应的进行编解码等相应业务处理)如果对Cha原创 2017-11-23 16:20:53 · 1195 阅读 · 0 评论 -
NioEventLoop源码分析
NioEventLoop源码分析NioEventLoop源码分析1 轮询IO事件2 处理IO事件3 处理任务队列31 转移队列任务32 定器检查截至任务截至时间在Netty开发中,一般异步IO事件处理采用NioEventLoopGroup作为线程池,而NioEventLoop为线程池中单个线程,作为系统任务执行单元。接下来将从源码分析Netty是如何处理任务的。原创 2017-10-26 15:10:57 · 618 阅读 · 0 评论 -
Netty线程模型
Reactor模型单线程Reactor多线程Reactor主从ReactorNetty线程模型Reactor模型 一般编写的网络框架以IO操作为主,将IO操作分割为相对独立的事件模块。大多数都是基于Reactor模式进行设计和开发,Reactor模式基于事件驱动,特别适合处理海量的I/O事件。1 单线程ReactorReactor单线程模型:所有的IO操作都在同一个NIO线程上面完成,原创 2017-11-03 11:37:20 · 400 阅读 · 0 评论 -
Netty内存池之PoolChunk
Netty内存池之PoolChunk为了避免频繁内存分配拉低系统性能,Netty4引入了内存池管理以提高内存分配效率。PoolChunk作为内存分配的核心类,将内存划分为块(Chunk)来管理。它通过构建一个平衡二叉树用以标记内存的使用情况,以来分配或释放内存。 1)PoolChunk有2048个Page(叶子节点)构成,每个Page默认大小为8k 2)每个父节点管理内存的为子节点的2原创 2018-02-04 00:41:11 · 691 阅读 · 0 评论 -
Netty内存池之PoolSubPage
在前一篇中刚刚分析了PoolChunk的内存管理策略,简单回顾下PoolChunk的分配原则: 1) 平衡二叉树维护标记内存块的使用情况 2) > 8k, PoolChunk直接在二叉树上标记并分配内存 3) 本文接着PoolChunk中的内存申请private long allocateSubpage(int normCapacity) { int d = maxO原创 2018-02-04 15:45:16 · 472 阅读 · 0 评论 -
Netty内存池之PoolArea
关于Netty内存池管理已经介绍了PoolChunk以及PoolSubPage来管理内存池。然后从应用层调用来看,应用层序并未直接去调用PoolChunk或PoolSubPage的allocate/free方法去管理内存,当我们通过PooledByteBufAllocator去分配操作内存时,它将内存的管理职责委托给PoolArea,本文将介绍PoolArea是如何管理内存的。 其成员变量如下:原创 2018-02-04 22:54:12 · 713 阅读 · 0 评论 -
Netty内存泄漏检测机制
广泛使用直接内存是Netty成为高效网络框架的原因之一。然而,直接内存释放并不受GC的控制,Netty中的对于直接内存的使用类似与C语言中(malloc、free),需要开发者手动分配和回收内存,而JVM GC只负责回收JAVA堆上的引用以及堆中内存。所有直接内存使用中,需要在JVM GC回收buf之前,手动调用release()方法去释放直接内存,否则存在内存泄漏。因此,在Netty中,在使用直...原创 2018-03-08 22:48:07 · 3525 阅读 · 0 评论