Netty框架学习之路(三)—— 初识Netty线程模型

本文通过类比餐厅服务流程,介绍了Netty的线程模型。Netty采用类似餐厅服务的分工模式,其中EventLoopGroup扮演服务员的角色,负责处理客户端请求。通过此类比,有助于理解Netty线程模型的工作原理。

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

前言

笔者认为单独讨论Netty的线程模型太抽象,如果能在现实生活中找到一样事物作为类比,那肯定能帮助我们提升对Netty的认识。

笔者曾经利用大学毕业和入职报到的空窗期去餐厅打工体验生活,感想此处不表。餐厅里面有一个司空见惯的现象,一般服务员的数量都会少于餐桌的数量,也就是说,在用餐高峰时期,一个服务员在同一时刻可能会招待不止一桌的客人,这是怎么做到的呢?

Netty线程模型

首先,我们来仔细分析一下餐厅营业接待客人用餐的流程:

  • 客人M到达餐厅;

  • 前台服务生A接待客人M,确认用餐人数、是否需要排位等等事项;

  • 前台服务生A带领客人M前往用餐区域,并委托给用餐区域服务生B,然后回到前台继续等待后续客人;

  • 服务生B安排客人M落座,点单,期间,服务生A又以相同的方式接待了客人N并委托给了服务生B;

  • 在客人M等待上菜的时间内,服务生B又另起一桌,安排客人N落座、点单;

    ……

  • 客人M用餐完毕,通知服务生B买单,然后离开餐厅,而此时服务生A还在忙着接待其他客人。

上述流程中,餐厅服务生的职责有两种,前台服务生负责接待,用餐区域服务生负责接待,一般情况下整个用餐期间客人都是在同一张餐桌上,并且都是由同一个服务员招待,而每一个服务员同一时间会招待不止一桌客人,客人用餐期间,服务员会巡视用餐区域,以便及时解决客人的需求。

如果我们将上述的过程用流程图展示出来,可以如下图表示:
这里写图片描述

那如果我们把里面的实体换成Netty中的组件,再稍加变换这便就是Netty的线程模型了。
这里写图片描述

如果我们把上图中绿色方框看成一个整体,其实它也是一个EventLoopGroup,原因先卖个关子,后文会有解释。

图中涉及到了几个Netty的核心组件,我们可以先来简单的看一下它的作用:

  • EventLoop:事件循环,通俗一点的理解,这就是工作线程(注:这种说法是错误的的,准确来说,EventLoop跟一个线程变量绑定)

  • EventLoopGroup:顾名思义,这是一组事件循环,可以看成是个线程池(注:这种说法也是错误的的,准确来说,EventLoopGroup跟一个线程数组绑定)

  • Channel:通道,通俗一点的说法就是服务端处理各种事件的一个场所。

现在我们再来看一遍netty的处理流程:

1,acceptor接受请求,并建立通信链路,完成认证鉴权等处理;

2,acceptor为此连接新建一个channel,将请求委托给EventLoopGroup并继续监听后续请求;

3,从 EventLoopGroup中选出一个 EventLoop与此channel绑定;

4,接下来的服务器与客户端的交互过程就全部在此分配的 EventLoop 中了;

总结

本文以餐厅接待客人的场景类比netty处理请求的过程,希望能给读者有个初步的认识,当然还有很多处理细节没有考虑到,笔者会在后续的文章中继续解释。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值