Netty解析二十三:Netty内存分配PoolSubpage

上一篇解析了Netty内存分配的伙伴模型和PoolChunk的原理,如果需要分配的内存大于等于pageSize则会直接通过Chunk进行分配,不过不会产生Page对象;如果小于pageSize也就是分为tiny/small会通过Chunk然后分配Subpage,由Subpage来管理具体内存。

阅读全文

Netty解析二十二:Netty内存分配PoolChunk

Netty的内存分配与JEMalloc类似,从大到小可以划分为:Arena, Chunk, Page, SubPage

其中核心的是Chunk,Chunk使用伙伴分配算法分配Chunk中的Page节点,而Page由更小的SubPage组成。

阅读全文

Netty解析二十一:Netty内存分配模型

Netty的PooledByteBuf采用与jemalloc[jemalloc 在 2005 年首次作为 FreeBSD libc 分配器使用]一致的内存分配算法。

阅读全文

同步/异步与阻塞/非阻塞

同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)。同步,就是调用某个东西是,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反 调用方不会理解得到结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状体来通知调用者,或者通过回掉函数来处理这个调用。

阅读全文

Netty解析二十:Netty中的拆包沾包处理

产生粘包和拆包问题的主要原因是,操作系统在发送TCP数据的时候,底层会有一个缓冲区,例如1024个字节大小,如果一次请求发送的数据量比较小,没达到缓冲区大小,TCP则会将多个请求合并为同一个请求进行发送,这就形成了粘包问题;如果一次请求发送的数据量比较大,超过了缓冲区大小,TCP就会将其拆分为多次发送,这就是拆包,也就是将一个大的包拆分为多个小包进行发送。

阅读全文

TCP协议如何保证可靠性

TCP和UDP的区别最明显的就是TCP保证传输的可靠性,而UDP没有这个保证。

阅读全文

Netty解析十九:Netty中的buffer

Netty自己封装了一个缓存区对象ByteBuf,那么就看看ByteBuf与Nio的buffer相比有什么优点呢。

阅读全文

Netty解析十八:Netty服务器端读写事件流程

之前解析了Netty服务器端启动流程和线程模型,现在解析Netty对于读写事件的处理流程。

阅读全文

Executors常用线程池区分

Executors是jdk中的一个工具包,提供了几种线程池的构建;分析一下各个线程池的实现与使用场景避免用错。

阅读全文

Netty解析十七:Netty线程模型

上一篇解析了Netty服务端启动流程,本篇解析boss(parent)和worker(child)两个线程池如何协同的,也就是Netty的线程模型

阅读全文