美文网首页
何为 Netty 的异步事件驱动?

何为 Netty 的异步事件驱动?

作者: ________方块丶 | 来源:发表于2021-07-11 14:57 被阅读0次

    初学Netty,就对官网上Netty的介绍印象很深,其中有一句话,“Netty是一款高性能的异步事件驱动的网络编程框架”,一直疑惑,明明是设计基于NIO(当然也支持传统BIO),却说他是异步事件驱动,这个异步事件驱动到底体现在什么地方。随着逐渐的理解,终于有了自己的答案。这个答案在于 Netty 对 EventExecutorEventExecutorGroupChannelHandler 事件处理这部分的设计。其重要子类就是,大家熟知的EventLoopEventLoopGroup 。如果还不熟悉,它的“孙子”就是 NIOEventLoopNIOEventLoopGroup

    EventExecutorEventExecutorGroup顶级接口设计:

    Netty事件驱动顶级接口设计.png

    大概绘制一下,Netty是如何进行异步事件驱动设计的,下图参考了 NIOEventLoopNIOEventLoopGroup

    Netty异步事件驱动设计.png
    1. EventExecutorGroup :一般来说是包含了 n 个 EventExecutor ,比如: NioEventLoopGroup 通过构造参数设置 EventExecutor 的数量,在初始化时会对应产生这么多的 EventExecutor。
    2. EventExecutor:负责处理具体的事件逻辑,在 NioEventLoop 中,每一个 NioEventLoop 都是一个线程,循环去队列中拉去任务执行,并且负责绑定 channel 的 selector.select .
    3. HandlerContext:虚构的,这个上图依据了,ChannelHandlerContext,主要责任是:1. 事件处理责任链。2. 识别事件,依据不同事件,将EventHandler的对应的逻辑,交给绑定了 EventExecutor 处理。Context在创建时,就会从EventExecutorGroup 中 获得一个 EventExecutor 和他绑定,这样做的好处就是,减少从Group取Executor的频率(即不用每个事件过来都去找一个Executor去处理)
    4. Event:表示事件,一般都是一个标识,比如说 Selector.select() 的 keys。

    事件,驱动一系列行为,行为逻辑执行交由线程池中选择出的线程(EventExcutor) 完成,执行完毕后,可以通过 Future 和 Promise setSucees setFairure 方法,获取结果或触发相关回调代码,这便是 Netty 的 异步事件驱动。

    相关文章

      网友评论

          本文标题:何为 Netty 的异步事件驱动?

          本文链接:https://www.haomeiwen.com/subject/qlpkpltx.html