[编织消息框架][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的并发库,好处就不用多讲了以后自己造轮子可以借鉴优秀设计的做法
作者: | solq |
博客地址: | http://www.cnblogs.com/solq111 |
博客版权: | 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。 如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。 淘宝店: 海豚极货店 QQ群:9547527 |
如果你热爱生活、热爱编程、热爱吉他。扫一扫加我微信 |
我的新书《编织消息框架》目前进行中,感谢大家关注! |
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。 |