自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王伟王胖胖的博客

对技术有点追求而已

  • 博客(40)
  • 收藏
  • 关注

原创 吃透Netty源码系列四十二之Http处理预备知识

吃透Netty源码系列四十二之Http处理预备知识HTTP的基本知识POST消息体传输方式直接发送消息体块传输HttpRequestDecoder请求解码器HttpObjectAggregator消息聚合器ByteBufHolder对缓冲区的一些操作DecoderResult编码结果DecoderResultProvider编码结果提供器HTTP的基本知识其实这个到处都有,我就讲几点Netty...

2020-02-29 20:46:51 930

原创 吃透Netty源码系列四十一之MessageToByteEncoder详解

吃透Netty源码系列四十一之MessageToByteEncoder详解MessageToByteEncoderTypeParameterMatcher空类型参数匹配get获取类型参数匹配器ReflectiveMatcherfind寻找泛型对应的匹配器find0图示结构显示构造函数隐式构造函数write写方法allocateBuffer申请缓冲区最简单的例子MessageToByteEncod...

2020-02-27 21:42:44 5285

原创 吃透Netty源码系列四十之CodecOutputList

吃透Netty源码系列四十之CodecOutputListCodecOutputList是什么重要属性回收器线程本地变量CodecOutputListsnewInstance获取CodecOutputList对象构造方法get有检查获取消息对象getUnsafe无检查获取消息对象insert插入对象到指定位置add添加对象到最后add添加对象到指定位置remove删除指定位置的对象clear清空r...

2020-02-27 21:42:06 1215 1

原创 吃透Netty源码系列三十九之固定长度与换行解码器

吃透Netty源码系列三十九之解码器一些子类FixedLengthFrameDecoderLineBasedFrameDecoder属性构造方法解码方法decode内部方法findEndOfLine寻找换行分隔符的位置fail抛出异常图示举例分几个包的的情况分包丢弃的情况FixedLengthFrameDecoder这个比较简单,固定长度解码,只要到了这个长度,就切片这个长度的缓冲区当做一个消...

2020-02-26 23:03:16 1094 3

原创 吃透Netty源码系列三十八之ByteToMessageDecoder详解

吃透Netty源码系列三十八之ByteToMessageDecoder详解ByteToMessageDecoder重要属性MERGE_CUMULATOR合并累加器COMPOSITE_CUMULATOR复合累加器抽象方法decodechannelRead读方法callDecode解码fireChannelRead传递消息列表中的消息decodeRemovalReentryProtection调用子类...

2020-02-26 23:02:45 6129 3

原创 吃透Netty源码系列三十七之编解码器预备知识

吃透Netty源码系列三十七之编解码器预备知识编解码器简介粘包半包问题如何解决粘包半包问题基于可变长度netty的编解码器编解码器简介我们来说说编解码器吧,简单来说就是把一堆数据变成另一堆,但是也变回来,在我们netty里,大多数就是从字节数组变成消息对象,或者一种类型的对象变成另一种。但是在网络传输中,编解码器就不是那么简单了,因为网络环境复杂,涉及很多通信机制,会使得你收到的数据不一定就是...

2020-02-26 23:02:08 484

原创 吃透Netty源码系列三十六之CompositeByteBuf详解二

吃透Netty源码系列三十六之CompositeByteBuf详解二removeComponent删除组件getByte获取数据findComponent查找组件findIt二分查找iterator获取缓冲区迭代器isDirect是否是直接缓冲区capacity有多少可读字节deallocate释放缓冲区根据组件数量来判断的方法removeComponent删除组件前一篇讲了新增操作,接下来讲...

2020-02-25 22:26:35 911

原创 吃透Netty源码系列三十五之CompositeByteBuf详解一

吃透Netty源码系列三十五之CompositeByteBuf详解CompositeByteBuf内部结构Component构造方法主要方法CompositeByteBuf重要属性CompositeByteBuf构造方法addComponent(ByteBuf buffer)addComponent0CompositeByteBuf简单来说就是各种缓冲区的组合,就是把他们封装到一个缓冲区,或者...

2020-02-25 22:26:07 2252 7

原创 吃透Netty源码系列三十四之PooledByteBuf相关补充

吃透Netty源码系列三十四之PooledByteBuf相关简介PooledByteBuf主要属性PooledHeapByteBufPooledDirectByteBufPooledUnsafeDirectByteBufPooledUnsafeHeapByteBufPooledByteBuf前面介绍了一大堆内存管理,对象池的东西,就是为了讲这个,现在再去理解容易多了。跟前面的Unpoole...

2020-02-23 22:05:37 1398

原创 吃透Netty源码系列三十三之Recycler细节解析二

吃透Netty源码系列三十三之Recycler细节解析二RECYCLER.get()stack.pop()Stack有对象的情况Stack没有对象的情况(后面讲)RECYCLER.get()获取对象,看看里面是怎么样实现的,我们讨论启用缓存的情况。 public final T get() { if (maxCapacityPerThread == 0) {//如果不启用,...

2020-02-22 21:31:19 723

原创 吃透Netty源码系列三十二之Recycler细节解析一

吃透Netty源码系列三十二之Recycler细节解析一Recycler一些配置属性简单例子入手Recycler初始化DELAYED_RECYCLEDthreadLocalStack构造方法处理器回收recycle(this)stack.pushpushNow当前线程是Stack的所属线程dropHandlepushLater当前线程不是Stack的所属线程newWeakOrderQueue创建队...

2020-02-22 21:30:40 997

原创 吃透Netty源码系列三十一之回收器Recycler预备知识

吃透Netty源码系列三十一之回收器Recycler回收器和对象池Handle接口创建对象池Recycler每个线程能独立的存取数据回收器和对象池回收器,就是来回收对象的,对象池,就是来存储对象复用的。为了跟对象池配合,使得对象池只是作为一个获取对象的实体,只要接受对象创建器即可,其他的不用管,而且将对象池如何存取的实现剥离到了回收器里,如果要改变具体存取方案,只要更换回收器即可,其实也是一种...

2020-02-22 21:29:48 777

原创 吃透Netty源码系列三十之内存分配角色结构图

吃透Netty源码系列三十之内存分配角色结构图PooledByteBufAllocatorPoolThreadCachePoolSubpagePoolChunkPoolChunk的depthMap树形表示PoolChunk的memoryMap树形表示PoolChunkListPoolArenaPooledByteBufAllocatorPoolThreadCachePoolSubpage...

2020-02-20 22:16:31 603 3

原创 吃透Netty源码系列二十九之池化内存分配总结

吃透Netty源码系列二十九之池化内存分配总结申请缓冲区创建PoolThreadLocalCache创建PoolThreadCache获取线程本地变量的PoolArena进行分配尝试用缓存来分配缓存分配失败,走正常分配流程释放缓冲区创建实体放入队列释放块防止内存泄露的措施申请缓冲区今天在来总结下内存分配中的几个主要的角色。这个就是我们用的池化内存分配器,里面会进行很多参数的配置,这些参数的默认...

2020-02-20 22:15:07 821

原创 吃透Netty源码系列二十八之PoolThreadCache二

吃透Netty源码系列二十八之PoolThreadCache二PoolArena的freePoolThreadCache的addcacheMemoryRegionCache的addPoolThreadCache的trimMemoryRegionCache的trimfreefreeEntryPoolArena的freeChunkPoolChunkList的freePoolChunk的freePool...

2020-02-19 22:14:40 756

原创 吃透Netty源码系列二十七之PoolThreadCache一

吃透Netty源码系列二十七之PoolThreadLocalCachePoolThreadLocalCachePoolThreadLocalCache

2020-02-19 22:14:04 1143

原创 吃透Netty源码系列二十六之FastThreadLocal二

吃透Netty源码系列二十六之FastThreadLocal二FastThreadLocal构造方法setsetKnownNotUnsetaddToVariablesToRemoveremoveremoveFromVariablesToRemovegetinitializegetIfExistsdestroyremoveAllFastThreadLocalThreadFastThreadLoca...

2020-02-18 22:54:46 669

原创 吃透Netty源码系列二十五之FastThreadLocal一

吃透Netty源码系列二十五之池化内存分配六PoolChunk的initBufPoolChunk的initBuf

2020-02-18 22:54:08 836

原创 吃透Netty源码系列二十四之池化内存分配五

吃透Netty源码系列二十四之池化内存分配五PoolChunk的initBufPoolChunk的initBuf上一篇我们讲到子页的内存分配,讲到了我们获取了handle,今天将获取之后做什么。我们可以看到子页分配的都是那么大的数,原因上篇已经讲过了。后面会有获取nioBuffer,就是在...

2020-02-17 21:19:43 756

原创 吃透Netty源码系列二十三之池化内存分配四

吃透Netty源码系列二十三之池化内存分配四PoolSubpage的allocategetNextAvailfindNextAvailfindNextAvail0removeFromPooltoHandle重点以及为什么要加上0x4000000000000000LPoolSubpage的allocate继续上一篇的,现在执行到subpage.allocate(),里面才是对子页可分配的内存做了...

2020-02-17 21:19:07 1154

原创 吃透Netty源码系列二十二之池化内存分配三

吃透Netty源码系列二十二之池化内存分配三PoolChunk的allocateSubpagePoolChunk的allocateSubpage

2020-02-16 22:48:23 799 4

原创 吃透Netty源码系列二十一之池化内存分配二

吃透Netty源码系列二十一之池化内存分配二PoolChunk的newChunkPoolChunk的一些属性PoolChunk构造方法newSubpageArray创建化子页数组allocate分配空间allocateRun大于页大小的分配,即Normal类型log2高效的取出2的次数深度d到底怎么算的allocateNodesetValueupdateParentsAllocrunLength...

2020-02-16 22:46:38 1026

原创 吃透Netty源码系列二十之池化内存分配一

吃透Netty源码系列二十之创建PoolArena简介PoolArena构造函数位运算细节1位运算细节2newSubpagePoolArraynewSubpagePoolHead(int pageSize)按chunk的内存使用率进行分组PoolArena构造函数上篇讲到在PooledByteBufAllocator最终的构造函数中,有创建PoolArena:我们先看看他的一些变量,后面会...

2020-02-16 22:46:05 1429 2

原创 吃透Netty源码系列十九之池化内存分配预备知识

吃透Netty源码系列十九之PooledByteBufAllocator介绍前言PooledByteBufAllocatorArena区域Chunk块Page页内存规格分类TinySmallNormalHuge图示主要变量主要变量初始化DEFAULT_PAGE_SIZE(io.netty.allocator.pageSize)DEFAULT_MAX_ORDER(io.netty.allocator...

2020-02-15 22:46:53 1566 1

原创 吃透Netty源码系列十八之PooledByteBuf预备知识jemalloc简介

吃透Netty源码系列十八之PooledByteBuf预备知识jemallocjemalloc内存分配算法简介解决的问题更加细粒度的分配jemalloc内存分配算法简介为什么要讲这个呢,因为netty的池化内存分配就是这个的改进版,要想更好的了解改进版,当然要先知道他的原版是怎么样的啦,要知道为什么他要用这个分配算法,能解决什么问题。首先这个是一篇论文里提出来的构想,还有他的源码[github...

2020-02-13 23:21:04 1018 2

原创 吃透Netty源码系列十七之UnpooledDirectByteBuf

吃透Netty源码系列十七之UnpooledDirectByteBufUnpooledDirectByteBufCLEANERCleanerJava6freeDirectBufferCleanerJava9freeDirectBufferUnsafe的invokeCleaner设置和获取ByteBufUtilUnpooledUnsafeDirectByteBufUnpooledUnsafeNoCl...

2020-02-11 22:39:19 2849 3

原创 吃透Netty源码系列十六之UnpooledHeapByteBuf

吃透Netty源码系列十六之ByteBuf系列二ByteBuf简单介绍ByteBuf简单介绍

2020-02-11 22:38:50 1803 3

原创 吃透Netty源码系列十四之DirectByteBuffer分配释放原理

吃透Netty源码系列十三之DirectByteBuffer分配释放原理简单介绍简单的例子DirectByteBuffer内存页对齐Bits.reserveMemoryBits.tryReserveMemoryUNSAFE.allocateMemoryDeallocatorUNSAFE.freeMemoryCleaner构造函数clean总结简单介绍Netty里的直接缓冲区其实是用了NIO的D...

2020-02-10 22:01:58 2525 5

原创 吃透Netty源码系列十五之ByteBuf和引用计数

吃透Netty源码系列十三之ByteBuf详解简单介绍一些特定的操作discardReadBytesclearByteBufAllocator简单介绍一个接口,但是有很多方法,可以理解成一个缓冲区数组,有一些操作的索引,比如读索引readerIndex表示从这个索引开始读,写索引writerIndex表示从这个索引开始写,还有缓冲区容量capacity等等。先看下类结构:有一个引用计数的接...

2020-02-10 21:59:51 2061 4

原创 吃透Netty源码系列十三之ChannelOutboundBuffer详解

吃透Netty源码系列十三之ChannelOutboundBuffer详解简单介绍内部类Entry重要属性decrementPendingOutboundBytessetWritablefireChannelWritabilityChangedtotalcurrentcurrentProgressprogresssizeclearNioBuffersremoveEntryremoveremove(...

2020-02-06 22:32:01 1823

原创 吃透Netty源码系列十二之NioSocketChannelUnsafe详细介绍

吃透Netty源码系列十二之管道NioSocketChannelUnsafe详细介绍简单介绍write(Object msg, ChannelPromise promise)filterOutboundMessage(Object msg)AbstractNioChannel的newDirectBuffer(ByteBuf buf)ChannelOutboundBuffer的addMessageC...

2020-02-05 21:55:46 934 2

原创 吃透Netty源码系列十一之管道DefaultChannelPipeline详细介绍三

吃透Netty源码系列十一之管道DefaultChannelPipeline详细介绍三TailContext的作用出站操作AbstractChannelHandlerContext的write(Object msg)AbstractChannelHandlerContext的invokeWrite0HeadContext的writeAbstractChannelHandlerContext的flu...

2020-02-05 21:55:18 1394

原创 吃透Netty源码系列十之管道DefaultChannelPipeline详细介绍二

吃透Netty源码系列十之管道DefaultChannelPipeline详细介绍二HeadContext的作用构造方法channelRegisteredchannelUnregisteredchannelActivereadIfIsAutoReadchannelReadCompleteHeadContext的作用我们继续上一篇,我们知道,在管道的头尾是不一样的处理器上下文和处理器,他们都集中...

2020-02-04 22:37:18 1555 2

原创 吃透Netty源码系列九之管道DefaultChannelPipeline详细介绍一

吃透Netty源码系列九之管道DefaultChannelPipeline详细介绍一一些重要属性构造方法一些常见的方法创建通道上下文头添加处理器addFirstaddFirst0添加到双向链表中callHandlerCallbackLater延迟触发HandlerAddedcallHandlerAddedInEventLoop添加触发HandlerAdded任务callHandlerAdded0触...

2020-02-04 22:36:57 1807

原创 吃透Netty源码系列八之管道ChannelPipeline

图解Netty源码系列八之管道ChannelPipelineworker组注册NioSocketChannelworker组注册NioSocketChannel

2020-02-03 21:27:30 1431

原创 吃透Netty源码系列七之worker组注册NioSocketChannel

图解Netty源码系列七worker组注册NioSocketChannel读取消息doReadByteswriteBytessetBytesinternalNioBuffer_internalNioBufferallocHandle.lastBytesRead(doReadBytes(byteBuf))pipeline.fireChannelRead(byteBuf)总结worker组注册Nio...

2020-02-03 21:27:10 924

原创 吃透Netty源码系列六之ServerBootstrapAcceptor分发

其实内部还是调用了selector.select(),这个selector已经被包装成SelectedSelectionKeySetSelector也是继承了Selector抽象类的 private int select(long deadlineNanos) throws IOException { if (deadlineNanos == NONE) { ...

2020-02-03 21:26:40 1801 15

原创 NIO源码系列之Selector史上最详细分析三

NIO源码系列之Selector史上最详细分析三选择器注册serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);findKey(Selector sel)register(AbstractSelectableChannel ch, int ops, Object attachment)interestOps(int ops)s...

2020-02-03 21:24:44 797

原创 NIO源码系列之Selector史上最详细分析二

NIO源码系列之Selector史上最详细分析二windows下的非阻塞设置windows下的selectpollAddressLiuux下的Epoll总结windows下的非阻塞设置在NIO里面,我们设置一般都会用非阻塞,也就是这样设置erverSocketChannel.configureBlocking(false);.,具体他做了什么呢,我们一起来看看,最终可以跟到一个JNI的本地方法...

2020-02-03 21:24:05 913

原创 NIO源码系列之Selector史上最详细分析一

NIO源码系列之Selector史上最详细分析Linux里的select函数Linux里的select函数在讲NIO里的Selector之前,我觉得有必要先有预先的知识铺垫,否则很难理解NIO的Selector在做什么。所以打算先讲下Linux的select,我们可以在Linux中用命令man select查看这个函数,我截取了一些:/* According to POSIX.1-2001...

2020-02-03 21:23:20 1323 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除