news 2026/6/15 7:12:34

关于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/6/15 9:43:22

期末复习01

期末复习目录1、项目结构2、Algorithm012.1代码要求3、Algorithm023.1代码要求及运行结果4、Algorithm034.1代码要求及运行结果5、Algorithm045.1代码要求及运行结果6、Algorithm056.1 代码要求及运行结果目录 1、项目结构 2、Algorithm01 2.1代码要求 使用冒泡排序算法对数…

作者头像 李华
网站建设 2026/6/15 4:55:57

27、深入探究Windows错误调试与报告机制

深入探究Windows错误调试与报告机制 在软件开发和系统运维过程中,错误调试与报告是解决问题、提升软件质量的关键环节。本文将详细介绍Windows系统中利用转储文件进行事后调试以及Windows错误报告服务的相关内容。 1. 转储文件的使用 转储文件是进程状态的静态快照,可用于…

作者头像 李华
网站建设 2026/6/15 10:23:21

28、软件调试中的错误报告与分析工具

软件调试中的错误报告与分析工具 1. Windows Error Reporting 与 Corporate Error Reporting 1.1 Windows Error Reporting 概述 Windows Error Reporting(WER)是一项强大的服务,它能让开发者监控应用程序在实际环境中的运行状况。当用户遇到与响应关联的故障时,会看到特…

作者头像 李华
网站建设 2026/6/15 10:40:32

31、Windows Vista 安全特性深度解析(上)

Windows Vista 安全特性深度解析(上) 1. 堆管理器的革新 Windows Vista 的堆管理器经历了重大改进。之前的元数据显示一个子段包含 15 个大小为 0x208 字节的块,随后是该子段中的堆块列表,每个块都标记有 LFH,表明是低碎片堆块。新的低碎片前端分配器极大地改善了与安全…

作者头像 李华
网站建设 2026/6/14 22:30:49

33、内存堆与锁的测试设置详解

内存堆与锁的测试设置详解 在软件开发过程中,内存堆(Heaps)和锁(Locks)相关的问题常常困扰着开发者。下面将详细介绍内存堆和锁的测试设置,帮助开发者更好地调试和解决相关问题。 1. 内存堆测试设置 内存堆测试设置包含强大的工具,能帮助开发者更轻松地解决与堆相关的…

作者头像 李华