两篇文章看懂EventLoopGroup,EventLoop的设计和运行机制(一)

本文深入探讨了EventLoopGroup和EventLoop在Netty中的设计和运行机制。通过分析类图,揭示了EventExecutorGroup作为线程池的角色,以及EventExecutor作为执行任务的基本单元。讲解了EventLoop的内部机制,包括与线程、任务队列的关系,以及如何处理IO和非IO事件。文章强调了理解设计需求和运行机制的重要性,为深入学习Netty打下基础。
摘要由CSDN通过智能技术生成

前言

学习初衷

今天分析的都是netty的内容,但是我自己还没有真正用netty实战过,我主要在用vert.x,一直想把vert.x的架构设计和线程模型搞得明明白白的,之前也看过一些源码,但我觉得没有彻彻底底地搞清楚,这次花点心思搞明白。但线程模型里面最重要的就是eventLoop了,所以最近一直在学习。
最核心的类就是NIOEventLoop了,也搜索过很多博客,里面也有不少将这个类从头到尾一行一行代码分析地明明白白的。但是这样又有什么用呢?这样就算是学会了EventLoop了吗?远远不够。

学习核心

学习EventLoop的话,核心有如下几点:

  1. 它的设计需求是什么。
  2. 它的类图是如何设计的?每一个接口或者抽象类的职责是什么,它们之间的区别和联系是啥?
  3. 它的内部运行机制(最好用一张图能表达清楚)。
  4. 它是如何把JAVA的NIO结合在自己的框架里面的。

第一点:很重要,任何一种框架都有基本的设计需求,了解需求才能更好的理解整个框架。但是我们怎么可能知道它的需求呢?确实不容易,能查就查点,其它的就靠多学习多实践去体会了。
第二点:因为它的类图比较复杂,想学好它,就要做到这点。
第三点:如果你经常用它,它的内部运行机制必须要清楚,当你提交了一个任务,脑海里面立马能出现它的执行画面,做到心中有数,完全不慌。没有什么是一张图表达不清楚的,如果不能,说明理解的不到位。
第四点:它基于Java原生的NIO,但是也做了很多封装。那它到底做了什么?为什么要做这些工作?

学习它的每一行代码是为了上面这几点服务的,能够让自己的理解更加到位,说的就是更简单一点就是总结;说实话,我虽然也看了很多遍源码,当时也都看明白了,但是过几天好多细节就忘光光了。对我而言主要是可能大脑觉得没有什么用,就自动遗忘了。事实也是如此,但是如果说自己做了总结,把非常关键的设计和机制了解清楚,然后以可视化的方式表达出来,这效果可能非常好。

目前自己可能只对二、三比较了解,这和自己的学习初衷有关系,我是来研究vert.x的,不是来学习netty的,搞清楚这几点就够了。不过第四点,我觉得后续还是有必要学习的。当了解后面几点了,就可以去反推它的设计需求了,然后跟自己的理解不断碰撞,反复推敲,然后一瞬间恍然大悟~~~

类图的学习

先放一张所有博客都会出现的图吧:
在这里插入图片描述
确实很复杂,但是很遗憾,我几乎没有看见过对这个类图进行详细分析的博客,仅仅只是讲NIOEventLoop这个类的核心代码,包括比较火爆的netty书籍《Netty权威指南(第2版)》也没有。但是你不觉得这很重要吗?道行比较深的人,只要把类图分析清楚了,它的设计和机制基本也了然于胸了。
当然我也没有做到,刚开始我也打算这样做,但是因为类图中的一个点,觉得不可能思议,根本不合理,就放弃了,也是先看了NIOEventLoop类的所有代码以后,才回头去分析的。当然,最后也解答了内心的疑惑,后面会提到。
那么如何来分析这个类图呢?
我推荐有两个步骤:删减和增补。
删减就是把最下面的实现类全部删除掉,仅仅保留最上面的一些接口定义,比如:
在这里插入图片描述
就是EventExecutorGroup,这个接口是netty自定义的第一个接口,然后看了一下这个接口,我发现它本身就有自己的实现,并不是NIOEventLoopGroup,所以我又采取了增补的方式,把上面的类图补充了一下:
在这里插入图片描述
(话说IDEA的类图生成功能还是可以的)
从这个图里面就能够清晰的看到有两条线:

NIOEventLoopGroup,NIOEventLoop
以及
DefaultEventExecutorGroup,DefaultEventExecutor
对应的接口定义分别是:
EventLoopGroup,EventLoop
EventExecutorGroup,EventExecutor
并且从他们的层次关系上面可以看出来࿰

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值