本文主要讨论Netty NioEventLoop原理及实践,关于Netty NioEventLoop,首先要知道NioEventLoop是什么,为什么它会是Netty核心Reactor处理器,实现原理是什么,进而再讨论Netty对其的实现及使用上我们可以学到哪些。

EventLoop是一个Reactor模型的事件处理器,一个EventLoop对应一个线程,其内部会维护一个selector和taskQueue,负责处理客户端请求和内部任务,内部任务如ServerSocketChannel注册、ServerSocket绑定和延时任务处理等操作。

EventLoop是由事件驱动的,比如IO事件和任务等,IO事件即selectionKey中ready的事件,如accept、connect、read、write等,由processSelectedKeys方法触发。处理完请求时间之后,会处理内部添加到taskQueue中的任务,如register0、bind0等任务,由runAllTasks方法触发。注意NioEventLoop在Linux中默认底层是基于epoll机制。

上图是EventLoop的核心流程图,如果从Netty整体视角看EventLoop的事件流转,下图来的更直观:

注意:bossGroup和WorkerGroup中的NioEventLoop流程是一致的,只不过前者处理Accept事件之后将连接注册到后者,由后者处理该连接上后续的读写事件。

大致了解了NioEventLoop之后,不知道有没有小伙伴有这样的疑问,为什么Netty要这样实现呢,这种实现方案对于我们后续开发如何借鉴呢?关于这些疑问,本文最后讨论哈

最新文章

  1. Android Weekly Notes Issue #236
  2. cocos2dx打包apk
  3. 《Javascript设计模式》笔记一js的表现力
  4. HtmlAgilityPack使用
  5. zoj3228Searching the String(ac自动机)
  6. Yaf零基础学习总结1-Yaf框架简介
  7. oracle数据库登录连接很慢;kettle连接oracle 报 IO 错误,socket time out 问题解决记录
  8. 用Java实现向Cassandra数据库中插入和查询数据
  9. java开发者最常去的20个英文网站
  10. memcache redundancy机制分析及思考
  11. 【Conclusion】MySQL使用
  12. 赵雅智_Swift(1)_swift简单介绍及类型
  13. ES6的Symbol
  14. python 数据分类汇总
  15. prepareRefresh()方法源码探究
  16. Python35安装
  17. C# 反射获取控件
  18. __super:: 使用
  19. Xamarin.Android 无法检索到 Resource 问题
  20. Linux Install geoip

热门文章

  1. 配置IIS服务器提供APP文件下载
  2. MongoDB分页查询优化方法
  3. MySql逻辑结构简介
  4. 前端技术之:如何创建一个NodeJs命令行交互项目
  5. win10+MinGw+ffmpeg 编译
  6. PL/SQL软件执行命令出现动态执行表不可访问,本会话的自动统计被禁止
  7. [考试反思]1019csp-s模拟测试80(a):天遣
  8. LeetCode刷题总结-数组篇(番外)
  9. 曹工杂谈:为什么很少需要改Spring源码,因为扩展点太多了,说说Spring的后置处理器
  10. Python基本数据结构之二进制