netty4源码阅读与分析---netty线程模型

本文用老板与员工的故事比喻Netty线程模型的工作原理。NioEventLoop扮演接受者和IO线程的角色,处理客户端连接请求并监听网络操作。通过异步处理accept事件与其他事件分离,提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要说下我自己对netty线程模型的理解,以及这样的线程模型的好处。通俗的来讲,netty的线程模型描述的就是老板和员工的故事。老板(通常情况下是一个老板)负责接活,与客户沟通,协调(netty的accept),谈成后(通道建立),他需要从员工中选出一位员工来负责处理后续具体的事宜(worker线程,这里我们有16位员工,编号1-16),员工做事时按照任务的先后顺序进行处理,这样可以避免错乱,这样每一位客户就有唯一对应的员工来处理任务。如果老板接到的活太多了,就有可能一个员工手上有N个客户的活需要干。这样描述应该比较形象了,下面我们画个示例图来表示这样的关系:

NioEventLoop在其中扮演的职责如下:

1,作为acceptor线程,处理客户端的请求接入

2,作为IO线程,监听网络操作将获取到的数据交给业务程序处理

为什么要做这要的设计呢,个人目前想到的有以下几点:

1,将accept事件和其他事件分离出来,通过异步处理的方式可以大大提高性能

2,accept事件是一个非常短暂的过程只需要单线程即可完成工作,如果采用多线程,线程间切换会影响性能,如果多线程轮寻同一个服务端channel,需要处理他们之间的竞争关系。如果这时候一直没有请求进行,线程间的切换是无意义的,白白浪费资源。

3,顺序处理线程的任务队列,可以避免并发问题,简化了线程操作

4,在一个线程中处理I/O事件和处理任务(各占比50%),可以极大提高cpu利用率,但是这也要求程序员特别注意,如果你的业务非常耗时,需要自行建立一个线程池异步执行业务。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值