Netty笔记一: NioEventLoopGroup介绍

NioEventLoopGroup介绍

 

1. NioEventLoopGroup从名字就可以看出它是NioEventLoop的一个集合, 它里面包含一些NioEventLoop.

2. NioEventLoopGroup里有一个名为children的数组用来保存NioEventLoop, 它还有个名为next的方法用来从NioEventLoop数组中返回一个NioEventLoop.

 

NioEventLoopGroup代码分析

 

1. 类继承结构

先不看接口的实现, 这样会比较简单, 还有就是接口中的方法最终还是会在类中实现.

NioEventLoopGroup类的继承比较简单, 主要的代码在NioEventLoopGroup和MultithreadEventExecutorGroup中.

 

2. 构造方法

NioEventLoopGroup()无参构造方法最后调用下面这个有参构造方法

public NioEventLoopGroup(int nThreads, Executor executor, final SelectorProvider selectorProvider) {

super(nThreads, executor, selectorProvider);

}

参数nThreads是NioEventLoopGroup中NioEventLoop数量, 参数executor是一个实现了Executor的线程工厂, 参数selectorProvider是Java Nio Selecter的提供者.

 

然后再调用父类MultithreadEventLoopGroup的构造方法

protected MultithreadEventLoopGroup(int nThreads, Executor executor, Object... args) {

super(nThreads == 0 ? DEFAULT_EVENT_LOOP_THREADS : nThreads, executor, args);

}

如果nThreads 等于0, NioEventLoop数量为机器cpu线程数的两倍.

 

然后调用父类MultithreadEventExecutorGroup的构造方法

protected MultithreadEventExecutorGroup(int nThreads, Executor executor, Object... args) {

if (nThreads <= 0) {

throw new IllegalArgumentException(String.format("nThreads: %d (expected: > 0)", nThreads));

}

if (executor == null) {

executor = new ThreadPerTaskExecutor(newDefaultThreadFactory());

}

children = new EventExecutor[nThreads];

......

}

这里创建NioEventLoop数组, 并创建数组中NioEventLoop对象.

 

3. 一些重要的方法

next()方法

它实现在MultithreadEventExecutorGroup中

public EventExecutor next() {

return children[Math.abs(childIndex.getAndIncrement() % children.length)];

}

它能依次从NioEventLoop数组中取出NioEventLoop.

 

submit(), schedule()方法

它们实现在AbstractEventExecutorGroup中

public Future<?> submit(Runnable task) {

return next().submit(task);

}

类线程池的submit功能, 它从NioEventLoop数组中取出一个NioEventLoop, 然后调用NioEventLoop的submit方法.

schedule方法也是一样.

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值