zoukankan      html  css  js  c++  java
  • [编织消息框架][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的并发库,好处就不用多讲了以后自己造轮子可以借鉴优秀设计的做法

  • 相关阅读:
    Symbian 进行最后一次系统升级 塞班时代结束
    Windows Phone 8 SDK RC 版推出
    JAXX 2.5.6 发布,XML用户界面框架
    jmx4perl 1.06 发布,JMX 的 Perl 接口
    Tine 2.0 RC2 发布,Web 群件解决方案
    LimeSurvey 2.0 正式版发布,Web 投票系统
    Android上的Guice RoboGuice
    tmux 1.7 发布,Linux 终端复用器
    linux设备模型详解【转】
    rmmod: chdir(/lib/modules): No such file or directory 解决方法
  • 原文地址:https://www.cnblogs.com/solq111/p/6903286.html
Copyright © 2011-2022 走看看