news 2026/8/21 5:27:17

关于Netty框架中boss线程和work线程是如何协调工作的源码分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于Netty框架中boss线程和work线程是如何协调工作的源码分析

服务端的boss线程是接收请求,work是处理对应每个连接的后续业务处理和IO操作。这块功能的处理机制源码分析如下:

(1)首先是用boss线程进行绑定端口并注册到从boss线程取出来的NioEventLoop对象上,然后NioEventLoop对象会在run方法里无限循环监听Selector的key。

(2)如果有客户端发起连接请求了,监听到连接成功或者读取事件,就会调用unsafe.read()方法,此时是是调用io.netty.channel.nio.AbstractNioMessageChannel.NioMessageUnsafe#read方法,此类对应的会调用实现类io.netty.channel.socket.nio.NioServerSocketChannel#doReadMessages方法。

(3)将接受到的客户端请求SocketChannel对象封装到msg消息里,然后执行pipeline.fireChannelRead方法进行管道传播处理,此时管道处理器里是放置了ServerBootstrapAcceptor方法来处理(此管道是服务端ServerBootstrap在初始化绑定监听时加入的)。

(4)ServerBootstrapAcceptor类的channelRead方法被触发调用,此方法会将接收到的客户端请求SocketChannel对象进行注册到子线程(即work线程池)childGroup.register(child),后续此条客户端的连接处理都有此子线程的NioEventLoop对象进行调用和处理,直到连接关闭。从而实现了boss线程接受请求到转给work线程进行处理具体的业务逻辑。

附加:

默认情况下,当创建NioEventLoopGroup的时候,如果不指定线程数量,则线程数量默认为CPU核心数*2,基本能符合常规的场景使用,跟可以实际场景来进调试work线程(例如CPU*3、CPU*4)。同时boss线程池,如果只绑定一个端口和ip,一个线程就够用,线程多了只是浪费资源没使用到,故常规的线程池创建时可以这么定义:

EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workGroup = new NioEventLoopGroup();


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 23:09:45

(智能家居设备兼容终极方案)从协议解析到自动发现的完整链路设计

第一章:智能家居设备兼容的挑战与演进随着物联网技术的快速发展,智能家居设备已从单一功能产品演变为复杂的生态系统。然而,不同厂商采用各异的通信协议和数据标准,导致设备间难以无缝协作,形成了“智能孤岛”现象。通…

作者头像 李华
网站建设 2026/8/21 1:29:19

提升大模型准确率的秘密武器:Kotaemon RAG框架详解

提升大模型准确率的秘密武器:Kotaemon RAG框架详解 在金融、医疗和法律等高风险领域,企业对AI系统输出的准确性要求近乎苛刻。一个看似合理的错误回答——比如误判药物剂量或引用过时法规条款——可能带来严重后果。而通用大语言模型(LLM&am…

作者头像 李华
网站建设 2026/8/21 16:27:58

25、64 位调试与 Windows x64 系统全解析

64 位调试与 Windows x64 系统全解析 1. 自定义调试器扩展概述 自定义调试器扩展为开发者提供了一种强大的工具,可通过开发自定义命令来自动化调试过程,增强调试会话的效果。尽管目前对调试器扩展的了解仅触及皮毛,但深入研究 SDK 文档并熟悉可用的大量 API 是非常值得的。…

作者头像 李华
网站建设 2026/8/21 23:33:47

30、Windows Vista 基础技术全解析

Windows Vista 基础技术全解析 1. 工具介绍 操作系统核心架构发生重大变化时,应用兼容性往往会成为问题。尽管微软投入大量时间和资源确保应用在各操作系统版本中继续运行,但实现 100% 兼容性并非总是可行。以下是一些工具在 Windows Vista 中的兼容性情况: | 工具 | Vis…

作者头像 李华
网站建设 2026/8/21 12:40:21

34、应用验证程序测试设置详解

应用验证程序测试设置详解 1. 内存测试设置 内存测试设置可捕获众多与内存操作相关的编程错误,如向内存 API 传递无效参数、对象初始化失败以及模块卸载问题等。默认情况下,所有与内存相关的停止代码触发时都会使调试器中断。以下是详细的停止代码及其说明: | 停止代码 |…

作者头像 李华
网站建设 2026/8/20 4:10:23

35、应用验证器测试设置与调试技术全解析

应用验证器测试设置与调试技术全解析 1. LuaPriv 测试设置 LuaPriv 测试设置全称为有限用户账户预测器(Limited User Account Predictor),主要有两个用途: - 预测应用程序是否能够以降低的权限集(如普通用户)运行。 - 确定应用程序在以降低的权限集(普通用户)运行时…

作者头像 李华