Netty
文章平均质量分 83
泮小俊233
技术爱好者
展开
-
Netty源码之客户端建立与连接
netty引导客户端启动类的代码如下EventLoopGroup group = new NioEventLoopGroup(); try {+ Bootstrap b = new Bootstrap(); b.group(group) .channel(NioSocketChannel.cla...原创 2018-05-17 22:36:44 · 1255 阅读 · 0 评论 -
Netty内存池之PoolChunk
netty4之后,netty中加入了内存池管理,看了netty后突然对这块很感兴趣,怎么办?最简单的方式无非看源码呗。我们顺着思路强行分析一波。分析下简单需求,为了能够简单的操作内存,必须保证每次分配到的内存时连续的。我们来看下netty的poolChunk。PoolChunk该类主要负责内存块的分配与回收,我们可以从源码中给的注释差不多看清PoolChunk的数据结构与算法。先介绍两个术语pag...原创 2018-05-20 19:06:17 · 968 阅读 · 0 评论 -
Netty源码之ChannelPipeline
这几天一直在看netty,感觉跟之前看过的tomcat原理多多少少有点类似,看了些书,觉得还是看源码比较实在,有感觉。这个图是 netty实战上面扣来的我觉得很实在(它是经过抽象看起来两条链,实际上就一条双向链表,无非类型不符合是只往下传递不处理),在ChannelPipeLine中,维护了具体处理相关通知的成员handler,组成的双向链表,链表成员为ChannelHandlerContext。...原创 2018-05-14 21:22:04 · 234 阅读 · 0 评论 -
netty内存池之poolSubpage
PoolChunk负责内存的分配与释放,其内部最小的分配单元为page,page的默认大小为8k。如果我们申请很多小块内存时,都按照page来分配,那么资源浪费可不是一点半点。针对这个问题,netty将page拆成了更小的内存块element,但超出了PoolChunk的负责范围,此时netty使用PoolSubpage来解决这个问题。PoolSubpage(PoolSubpage<T>...原创 2018-05-21 16:11:52 · 523 阅读 · 0 评论 -
netty内存池之PoolChunkList
PoolChunk的上层还抽象出一个管理类,PoolChunkList,它负责多个chunk的生命周期,以及一些内存分配的优化,直接看源码吧。 private static final Iterator<PoolChunkMetric> EMPTY_METRICS = Collections.<PoolChunkMetric>emptyList().iterator(...原创 2018-05-21 18:53:03 · 481 阅读 · 0 评论 -
netty内存池之PoolArena
之前做了那么多铺垫,在这篇博文,我们将看清netty内存池管理的全貌。PoolArena是一个抽象类,其子类为HeapArena和DirectArena对应堆内存(heap buffer)和堆外直接内存(direct buffer),除了操作的内存(byte[]和ByteBuffer)不同外两个类完全一致)。PoolArena管理了之前一系列的类,这里讲介绍它的实现细节。该类的实现接口是PoolA...原创 2018-05-21 21:03:08 · 1868 阅读 · 0 评论 -
Netty源码之EventLoop
关于线程池,池化和重用相对于简单地为每个任务都创建和销毁线程是一种进步,但它并不能消除由于上下文切换所带来的开销。下面我们来看看netty的线程模型,它是如何优化和简化多线程的操作。netty常用时,配置NioEventLoopGroup,为每个channel绑定相应的EventLoop,EventLoop上绑定的Thread处理相应channel上的所有io操作和事件。NioEventLoopG...原创 2018-05-15 19:25:32 · 436 阅读 · 0 评论 -
Netty源码之服务端启动与绑定
通常我们用ServerBootstrap引导服务器,public final class SimpleServer { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup...原创 2018-05-16 17:40:41 · 505 阅读 · 0 评论 -
Netty之FastThreadLocal
FastThreadLocal,看名字就可以知道,netty君让其优化了。我们先来看看ThreadLocal哪里慢了需要fast,上一篇分析我们知道,Thread内有一个ThreadLocalMap的成员,该成员相当于一个map(数组+线性扫描),该map以ThreadLocal为key,若要定位到相应的value,需要两步。先是根据ThreadLocal的hashCode取余定位到数组的小标,因...原创 2018-07-04 13:10:01 · 714 阅读 · 0 评论