前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NioEventLoop

NioEventLoop

作者头像
书唐瑞
发布2022-06-02 13:48:11
1220
发布2022-06-02 13:48:11
举报
文章被收录于专栏:Netty历险记

在前面章节中我们也介绍过NioEventLoop内容.它有点类似Netty的'大动脉', 驱动整个Netty的运作.

学习NioEventLoop, 需要掌握三个步骤: 创建 启动 执行.

当我们通过代码new NioEventLoopGroup()时, 默认创建2倍CPU 个NioEventLoop. 图中在NioEventLoop周围环绕的都属于NioEventLoop的成员属性.

当我们针对某一个NioEventLoop首次执行任务时, 这个时候ThreadPerTaskExecutor会通过ThreadFactory创建一个FastThreadLocalThread. FastThreadLocalThread继承自java.lang.Thread, 所以说FastThreadLocalThread也是一个线程, 并且会将这个线程赋值给thread属性. 一个NioEventLoop有且只和一个thread关联. 这个线程负责轮询IO事件, 处理IO事件, 执行taskQueue里面的任务等.

当我们的业务线程执行写操作时, 底层默认判断如果不是NioEventLoop关联的那个thread线程, 就会将任务放入taskQueue中. 保证异步串行无锁化.

在图中我们还看到有个Selector, 它就是用来实现多路复用. 当多个客户端连接到服务器时, 每个NioEventLoop会被'分配'到多个客户端连接, 通过Selector进行轮询IO事件, 实现多路复用. 在前面章节我们也说过, 这个Selector默认底层使用HashSet装载SelectionKey. 而Netty对其优化, 通过反射, 底层使用数组装载SelectionKey, 时间复杂度O(1).

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Netty历险记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档