【Netty源码解读和权威指南】第34篇:Netty Selector优化——为什么比JDK NIO快这么多
上一篇【第33篇】Netty连接管理与心跳检测——工业级断连处理方案下一篇【第35篇】Netty时间轮HashedWheelTimer源码解析——百万定时任务的秘密一、优化一替换JDK SelectedKeySetJDK Selector的selectedKeys()返回HashSet遍历时需要Iterator有大量装箱/拆箱开销。Netty的做法用SelectedSelectionKeySet基于数组替换HashSet。// 反射替换底层SetfinalclassSelectedSelectionKeySetextendsAbstractSetSelectionKey{SelectionKey[]keysnewSelectionKey[1024];intsize;publicbooleanadd(SelectionKeykey){if(sizekeys.length)returnfalse;keys[size]key;// O(1)追加不需要hash计算returntrue;}publicvoidreset(){size0;// O(1)清空不需要逐个removeArrays.fill(keys,null);// 帮助GC}}// 遍历时直接for循环访问数组比Iterator快很多for(inti0;iselectedKeys.size;i){SelectionKeykselectedKeys.keys[i];// 处理...}性能对比10万连接Netty遍历selectedKeys比JDK快3-5倍。二、优化二解决epoll空轮询BugJDK在Linux下存在epoll空轮询BugSelector.select()没有事件却返回导致CPU 100%。Netty的检测与修复// NioEventLoop中检测空轮询if(SELECTOR_AUTO_REBUILD_THRESHOLD0){longselectTimeSystem.nanoTime()-time;if(selectTime1000000000/10){// 小于100ms就算空轮询emptyPollingCount;if(emptyPollingCount512){// 连续512次空轮询rebuildSelector();// 重建SelectoremptyPollingCount0;}}else{emptyPollingCount0;}}// rebuildSelector创建新Selector将旧Channel重新注册publicvoidrebuildSelector(){SelectornewSelectorSelectorProvider.provider().openSelector();for(SelectionKeykey:oldSelector.keys()){Channelch(Channel)key.attachment();ch.register(newSelector,key.interestOps(),ch);}oldSelector.close();this.selectornewSelector;}三、优化三批量处理任务// runAllTasks可以一次处理多个任务减少线程切换protectedbooleanrunAllTasks(longtimeoutNanos){fetchFromScheduledTaskQueue();RunnabletaskpollTask();if(tasknull)returnfalse;longdeadlineSystem.nanoTime()timeoutNanos;longrunTasks0;for(;;){safeExecute(task);runTasks;taskpollTask();if(tasknull||System.nanoTime()deadline)break;}returntrue;}四、其他优化优化说明效果直接内存优先I/O使用DirectBuffer减少GC内存池PooledByteBufAllocator减少分配开销TCP_NODELAY禁用Nagle算法降低延迟SO_REUSEADDR端口快速复用避免TIME_WAIT五、总结优化技术SelectedKeySet替换数组替代HashSetepoll空轮询修复rebuildSelector批量任务处理一次循环执行多个任务关键原则减少GC、减少锁、减少系统调用上一篇【第33篇】Netty连接管理与心跳检测——工业级断连处理方案下一篇【第35篇】Netty时间轮HashedWheelTimer源码解析——百万定时任务的秘密

相关新闻

Unity Mod Manager终极指南:3步完成Unity游戏模组高效管理

Unity Mod Manager终极指南:3步完成Unity游戏模组高效管理

Unity Mod Manager终极指南:3步完成Unity游戏模组高效管理 【免费下载链接】unity-mod-manager UnityModManager 项目地址: https://gitcode.com/gh_mirrors/un/unity-mod-manager 你是否在Unity游戏中安装模组时遇到过各种麻烦?文件冲突、版本不…

2026/6/21 4:16:08阅读更多 →
Unlock Music:浏览器端加密音乐文件解锁工具完全指南

Unlock Music:浏览器端加密音乐文件解锁工具完全指南

Unlock Music:浏览器端加密音乐文件解锁工具完全指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https:…

2026/6/21 4:16:08阅读更多 →
拆解‘GPT-5.4 mini/nano’:小模型部署的真相与实操指南

拆解‘GPT-5.4 mini/nano’:小模型部署的真相与实操指南

1. 项目概述:一场被误读的“模型发布”背后的真实图景最近朋友圈和几个技术群都在刷屏一条消息:“最强小模型 GPT-5.4 mini & nano横空出世,MetaChat上国内直接用!”配图往往是某款聊天界面截图,右下角标着“GPT-5…

2026/6/21 4:11:08阅读更多 →
PotatoNV终极指南:三步解锁华为麒麟设备Bootloader,开启刷机自由之路

PotatoNV终极指南:三步解锁华为麒麟设备Bootloader,开启刷机自由之路

PotatoNV终极指南:三步解锁华为麒麟设备Bootloader,开启刷机自由之路 【免费下载链接】PotatoNV Unlock the bootloader on Huawei devices with Kirin 620/65x/95x/960 项目地址: https://gitcode.com/gh_mirrors/po/PotatoNV 对于华为和荣耀设备…

2026/6/21 5:41:13阅读更多 →
SC100多核DSP链接器配置实战:MMU映射、内存优化与核间通信

SC100多核DSP链接器配置实战:MMU映射、内存优化与核间通信

1. 项目概述与核心价值如果你在嵌入式领域,特别是涉及多核DSP或高性能处理器开发,那么“链接器”这个词对你来说绝不陌生。它远不止是编译流程最后那个把一堆.o文件粘在一起的工具。在像StarCore SC100这类带有复杂内存管理单元(MMU&#xff…

2026/6/21 5:41:13阅读更多 →
Trae多模型中转API配置实战:Claude/GPT-5.4/DeepSeek统一调度

Trae多模型中转API配置实战:Claude/GPT-5.4/DeepSeek统一调度

1. 项目概述:为什么需要在 Trae 中配置多模型中转 API?Trae 不是传统意义上的 IDE,它更像一个面向 AI 编程工作流的“智能协作者中枢”——底层基于 Codex 架构深度定制,但向上屏蔽了原始模型调用的复杂性,把注意力聚焦…

2026/6/21 5:41:13阅读更多 →
魔兽争霸3终极优化指南:三步免费解决宽屏适配、地图加载与帧率问题

魔兽争霸3终极优化指南:三步免费解决宽屏适配、地图加载与帧率问题

魔兽争霸3终极优化指南:三步免费解决宽屏适配、地图加载与帧率问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为魔兽争霸3…

2026/6/21 5:41:13阅读更多 →
3步解锁你的QQ音乐:qmcdump让加密音乐重获自由播放权

3步解锁你的QQ音乐:qmcdump让加密音乐重获自由播放权

3步解锁你的QQ音乐:qmcdump让加密音乐重获自由播放权 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否…

2026/6/21 5:41:13阅读更多 →
Hermes AI Agent低成本部署:systemd+llama.cpp+LMDB实战

Hermes AI Agent低成本部署:systemd+llama.cpp+LMDB实战

1. 项目概述:为什么一个 AI Agent 的月成本能从 50 元压到 5 元?“跑一个 AI Agent,每月成本从 50 块降到 5 块”——这个标题不是营销话术,而是我在过去三个月里真实跑通的账本。核心不是换模型、不是降精度,而是把整…

2026/6/21 5:36:13阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/21 0:00:40阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/21 0:00:40阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/21 0:00:40阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/21 0:00:40阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/21 0:00:40阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/21 0:00:40阅读更多 →