2019-03-13 NioEventLoop

继承关系

NioEventLoop的父类有SingleThreadEventLoop,SingleThreadEventExecutor,可见NioEventLoop是一个单线程的组件。在前两个父类中,实现了单线程的任务提交和处理逻辑,并实现诸如runAllTask的方法方便NioEventLoop调用。
从接口上,SingleThreadEventLoop是EventLoop的实现类,而EventLoop实际上十分抽象,可以看做一个可以运行任务的节点。谈谈我的理解,EventLoop实际上需要处理的是网络io的处理,而各种方式的io没法统一抽象。EventLoop从外观上看只是一个任务处理节点,对外很好的封装了它的复杂度。

运行流程

NioEventLoop首先会从NioEventLoopGroup中分配出来,并给予到一个Channel。Channel初始化并将NioEventLoop中的Selector注册到自己这个Channel上。这时NioEventLoop可以正常的接收到这个Channel的各种事件了。
NioEventLoop自启动后就会一直进行select&doTask操作,而他的启动时机是当它收到第一个Task的时候(及Channel的注册任务)。
NioEventLoop首先会进行select操作,获得selector感兴趣的事件,若未获得任何事件,则进行一定时间的阻塞获取(若此时存在任务则直接运行selectNow,保证任务优先)。接着,它将接受到的事件传递给channel,让channel进行进一步处理。接着它将运行一些它队列里的任务,具体运行多长时间则根据之前selector在select上花掉的时间(这样做是为了使网络io与任务分片运行,看起来不卡顿)。

停止

亮点

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容