从Netty EventLoop实现上可以学到什么
2024-09-01 17:38:27
本文主要讨论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要这样实现呢,这种实现方案对于我们后续开发如何借鉴呢?关于这些疑问,本文最后讨论哈
最新文章
- Android Weekly Notes Issue #236
- cocos2dx打包apk
- 《Javascript设计模式》笔记一js的表现力
- HtmlAgilityPack使用
- zoj3228Searching the String(ac自动机)
- Yaf零基础学习总结1-Yaf框架简介
- oracle数据库登录连接很慢;kettle连接oracle 报 IO 错误,socket time out 问题解决记录
- 用Java实现向Cassandra数据库中插入和查询数据
- java开发者最常去的20个英文网站
- memcache redundancy机制分析及思考
- 【Conclusion】MySQL使用
- 赵雅智_Swift(1)_swift简单介绍及类型
- ES6的Symbol
- python 数据分类汇总
- prepareRefresh()方法源码探究
- Python35安装
- C# 反射获取控件
- __super:: 使用
- Xamarin.Android 无法检索到 Resource 问题
- Linux Install geoip