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

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

事件系统主要由线程池同队列技术组成,有以下几个优点

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

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

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

 

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

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

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

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

 

接下分析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的并发库,好处就不用多讲了以后自己造轮子可以借鉴优秀设计的做法

 

posted @ 2017-05-25 15:41  solq321  阅读(348)  评论(0编辑  收藏  举报