温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Netty组件中怎么注册Channel

发布时间:2021-08-12 11:00:16 来源:亿速云 阅读:123 作者:Leah 栏目:大数据

本篇文章给大家分享的是有关Netty组件中怎么注册Channel,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、EventLoopGroup类图概览

 

在客户端示例代码中的中实例化了NioEventLoopGroup,接下来分析下该实例化过程。 

EventLoopGroup workerGroup = new NioEventLoopGroup();
Bootstrap b = new Bootstrap();
b.group(workerGroup); 
 

从以下类图结构io.netty.util.concurrent.AbstractEventExecutorGroup分支主要负责多线程任务的处理;io.netty.channel.EventLoopGroup分支主要负责Channel相关的注册。MultithreadEventExecutorGroup与MultithreadEventLoopGroup分别继承和实现了上面AbstractEventExecutorGroup和EventLoopGroup,将其负责的功能进行融合。

Netty组件中怎么注册Channel



二、构造函数解读

 Netty组件中怎么注册Channel

Netty组件中怎么注册Channel

Netty组件中怎么注册Channel


构造函数
nThreads:eventLoopThreads线程数量,默认值0时取CPU核数的2倍,可以通过参数io.netty.eventLoopThreads指定
Executor:默认ThreadPerTaskExecutor
SelectorProvider默认SelectorProvider.provider(),用于开启Selector和Channel
SelectStrategyFactory:SelectStrategy工厂类,默认DefaultSelectStrategyFactory
EventExecutorChooserFactory:EventExecutor选择器,默认为DefaultEventExecutorChooserFactory


三、初始化EventExecutor数组

 Netty组件中怎么注册Channel

Netty组件中怎么注册Channel

代码解读
EventExecutor[] children:数组大小为nThreads,默认为CPU核数乘以2。
EventExecutor继承了EventExecutorGroup本质上为线程框架类Executor
children[i]:数据元素为EventLoop,本示例中为NioEventLoop。


 
NioEventLoop类图

NioEventLoop继承了SingleThreadEventLoop,SingleThreadEventLoop同时继承和实现了EventExecutor和EventLoop。即:NioEventLoop拥有了线程类框架处理多线程任务的能力和处理Channel能力。

Netty组件中怎么注册Channel


备注:本文中EventExecutor数组children的元素为NioEventLoop,NioEventLoop同时拥有线程框架能力和Channel注册等处理能力。



四、EventExecutor选择器


第三部分对EventExecutor[] children进行初始化分析,然在使用时如何选择其中一个元素呢?
在初始化过程中有以下一行代码,用于初始化EventExecutorChooser。

chooser = chooserFactory.newChooser(children);

EventExecutorChooser类图结构

Netty组件中怎么注册Channel

选择策略

Netty组件中怎么注册Channel

@1  如果数组长度是2的幂次方,选择PowerOfTwoEventExecutorChooser,在选取EventExecutor时使用executors[idx.getAndIncrement() & executors.length - 1]  
 @2   如果数组长度不是2的幂次方,选择GenericEventExecutorChooser,executors[Math.abs(idx.getAndIncrement() % executors.length)]。

五、Channel注册

Channel注册入口

Netty组件中怎么注册Channel

选择EventLoop
本文为NioEventLoop

Netty组件中怎么注册Channel

绑定Channel到EventExecutor
通过DefaultChannelPromise绑定Channel到EventExecutor(NioEventLoop)

Netty组件中怎么注册Channel

将Channel注册到Selector

Netty组件中怎么注册Channel

以上就是Netty组件中怎么注册Channel,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI