[编织消息框架][netty源码分析]2 EventLoop

eventLoop从命名上看是专门处理事件并发

事件系统主要由线程池同队列技术组成,有如下几个优势框架

1.任务出队有序执行,不会出现错乱,固然前提执行线程池只有一个socket

2.解偶系统复杂度,这是个经典的生产者/消费者模型,生产者只须要生成执行上下文须要的数据,消费者集中实现处理逻辑,无须要关注太多关系层次问题ide

3.可根据业务按单一类型事件独立分配一套event system ,提升并行处理而又解决一些并行产生的并发问题oop

 

那做为一个消息框架,处理的事件有那些呢?测试

主要分为系统事件同用户事件优化

如消息编解码、socket io 处理、socket 链路创建等为系统事件spa

应用层同业务逻辑为用户事件线程

 

接下分析eventLoop类层次关系设计

public interface EventLoop extends OrderedEventExecutor, EventLoopGroup {
    @Override
    EventLoopGroup parent();
}
public interface EventLoopGroup extends EventExecutorGroup {
}
public interface EventExecutorGroup extends ScheduledExecutorService, Iterable<EventExecutor> {
}

从依赖关系上能够看出 EventLoop 继承于 EventLoopGroup,Group就是多个EventLoop 这样设计目的是为了重用扩展,但由于太灵活了容易形成混乱

有时分不清楚单个仍是多个呢?解决方式也很简单,就是经过实现类来区分

EmbeddedEventLoop 是用来测试的

SingleThreadEventLoop 是单线程实现,这其实就是EventLoop的实现类

DefaultEventLoop 是默认配置的SingleThreadEventLoop

NioEventLoop 是针对于nio socket 优化设计的

 

EventLoopGroup命名也是大同小异,从名称上看设计思路跟NioEventLoop 是一致的

 

EventExecutorGroup继承于ScheduledExecutorService,直接依赖或扩展jdk的并发库,好处就不用多讲了之后本身造轮子能够借鉴优秀设计的作法

相关文章
相关标签/搜索