2024年3月6日
该文所涉及的 netty 源码版本为 4.1.6。 Netty 的对象池 Recycler 是什么 Recycler 是 Netty 中基于 ThreadLocal 的轻量化的对象池实现。既然是基于 ThreadLocal,那么就可以将其理解为当前线程在通过对象池 Recycler 得到一个对象之后,在回收对象的时候,不需要将其销毁,而是放回到该线程的对象池中即可,在该线程下一次用到该对象的时候……
阅读全文
2024年3月6日
该文所涉及的 netty 源码版本为 4.1.6。 MpscLinkedQueue 是什么 在 Netty 的核心中的核心成员 NioEventLoop 中,其中任务队列的实现 taskQueue 便是 MpscLinkedQueue。MpscLinkedQueue 是 Netty 所实现的一个基于多生产者单消费者的无锁队列,针对 NioEventLoop 中任务队列的特点,其单消费者的场景在一开始就避免了从队列中取数据时加……
阅读全文
2024年3月6日
该文所涉及的 Netty 源码版本为 4.1.6。 HashedWheelTimer 是什么 Netty 的时间轮 HashedWheelTimer 给出了一个粗略的定时器实现,之所以称之为粗略的实现是因为该时间轮并没有严格的准时执行定时任务,而是在每隔一个时间间隔之后的时间节点执行,并执行当前时间节点之前到期的定时任务。 当然具体的定时任务的时间执行精度可以通过调节 HashedWheelTimer 构造……
阅读全文
2024年3月6日
前言 前段时间在给自己的玩具项目设计的时候就遇到了一个场景需要定时任务,于是就趁机了解了目前主流的一些定时任务方案,比如下面这些: Timer(halo 博客源码中用到了) ScheduledExecutorService ThreadPoolTaskScheduler(基于 ScheduledExecutorService) Netty 的 sch……
阅读全文
2024年3月6日
Netty 的 FastThreadLocal 源码解析 该文中涉及到的 Netty 源码版本为 4.1.6。 Netty 的 FastThreadLocal 是什么 A special variant of ThreadLocal that yields higher access performance when accessed from a FastThreadLocalThread. Internally, a FastThreadLocal uses a constant index in an array, instead of using hash code and hash table, to look for a variable. Although seemingly very subtle, it yields slight performance advantage over using a hash table, and it is useful when accessed frequently. To take advantage of this thread-local variable, your thread must be a FastThreadLocalThread or its subtype. By default, all threads created by DefaultThreadFactory are FastThreadLocalThread due to this reason. Note that the fast path is only possible on threads that extend FastThreadLocalThread, because it requires a special field to……
阅读全文
2024年3月6日
该文所涉及的 netty 源码版本为 4.1.6。 Netty 中的 ByteBuf 为什么会发生内存泄漏 在 Netty 中,ByetBuf 并不是只采用可达性分析来对 ByteBuf 底层的 byte[] 数组来进行垃圾回收,而同时采用引用计数法来进行回收,来保证堆外内存的准确时机的释放。 在每个 ByteBuf 中都维护着一个 refCnt 用来对 ByteBuf 的被引用数进行记录,当 ByteBuf 的 retain() 方法被调用时,……
阅读全文
2024年3月6日
基于自定义协议的Netty开发 在某些情况下,我们需要基于TCP/IP协议栈开发自己的应用层协议,以满足特定的业务需求。在这篇博客中,我们将使用Netty开发一个基于自定义协议的客户端和服务器。 1. 环境准备 首先,我们需要在项目中引入Netty的依赖。在Maven项目中,添加以下依赖:……
阅读全文
2024年3月6日
基于WebSocket协议的Netty开发 WebSocket是一种在单个TCP连接上进行全双工通信的协议。在这篇博客中,我们将使用Netty开发一个基于WebSocket协议的实时聊天系统。 1. 环境准备 首先,我们需要在项目中引入Netty的依赖。在Maven项目中,添加以下依赖: 1……
阅读全文
2024年3月6日
基于HTTP协议的Netty开发 Netty是一个高性能、易于使用的NIO客户端服务器框架,用于快速开发可维护的高性能协议服务器和客户端程序。在这篇博客中,我们将使用Netty开发一个基本的HTTP服务器。 1. 环境准备 首先,我们需要在项目中引入Netty的依赖。在Maven项目中,添……
阅读全文
2024年3月6日
Netty 中的 Future 和 Promise 组件是用于处理异步操作结果的两个接口。Future 表示一个异步操作的结果,它可以用于检查操作是否完成、获取操作结果、取消操作等。Promise 是 Future 的子接口,它可以用于设置操作结果、通知操作完成等。以下是 Netty 中 Future 和 Promise 组件的部分代码,并添加了中文注释: 1 2 3 4 5 6 7 8 9 10 11……
阅读全文