Netty

Netty源码分析 EventLoop(一)接口定义

概述

在较早的文章中,对Netty EventLoop的整体结构进行了一些介绍(文章地址)。这一系列的文章中,将分多个部分对EventLoop进行详细讲解。

此篇文章将介绍的类包括
1. EventExecutorGroup
1. EventExecutor
1. OrderedEventExecutor
1. EventLoopGroup
1. EventLoop

EventExecutorGroup

它是整个EventLoop中第一个由Netty定义的接口。
* 通过next()方法提供EventExecutor
* 管理EventExecutor的生命周期

优雅关闭

定义一个quiet period,如果在这个期限内没有新任务提交,则关闭EventLoop;如果有任务提交,则重新等待一个周期,直至达到timeout时间后,直接按照shutdown()的方式进行关闭。

## 获取EventExecutor

## 提交任务

定时任务

EventExecutorGroup继承自ScheduledExecutorService,因此提供定时任务类的方法。

EventExecutor

作为一种特殊的(继承)EventExecutorGroup,提供一些便捷方法查看一个线程是否在EventLoop中执行。

获取引用

状态查询

Promise相关

Promise的原理将在单独的文章中介绍。

Future相关

方法的使用场景在讲解接口时间时介绍。

OrderedEventExecutor

新版本的netty加入了这个标记接口,特征为所有被提交的任务将被顺序串行执行。

EventLoopGroup

EventLoopGroup定义为一种特殊的EventExecutorGroup,新增的特性是可以绑定Channel,这些Channel将在后续的selection操作时被处理。

获取引用

这是一个重写方法,因为EventLoop是EventExecutor的子类。

Channel相关

EventLoop

最后的主角登场,一个EventLoop将会处理所有已注册Channel的I/O操作。通常一个EventLoop会处理多个Channel。

parent()方法也是一个重写方法,重写了EventExecutor的parent()方法,返回值由EventExecutorGroup改为其子类EventLoopGroup。

总结

  1. EventExecutor系列继承了ScheduledExecutorService,可以当做一个线程池来理解。
  2. Group代表多个线程,非Group的子类代表仅包含1个线程。
  3. EventLoop系列是在EventExecutor的基础上,绑定了Channel,是可以处理Channel的线程池。
  4. 狭义的EventLoop即是能够处理Channel的只包含1个线程的线程池。

© 2018, 高飞航.cn. 版权所有.

About gaofeihang

开发工程师,本站的作者。欢迎留下您宝贵的意见!

发表评论

电子邮件地址不会被公开。 必填项已用*标注