其中包括了常用的实现类NioEventLoopGroup。OioEventLoopGroup在前面的例子中也有使用过。
从Netty的架构图中,可以知道服务器是需要两个线程组进行配合工作的,而这个线程组的接口就是EventLoopGroup。
每个EventLoopGroup里包括一个或多个EventLoop,每个EventLoop中维护一个Selector实例。
5.9.1 轮询机制的实现原理
我们不妨看一段DefaultEventExecutorChooserFactory的源码:
private final AtomicInteger idx = new AtomicInteger();
private final EventExecutor[] executors;
@Override
public EventExecutor next() {
//idx.getAndIncrement()相当于idx ,然后对任务长度取模
return executors[idx.getAndIncrement() & executors.length - 1];
}
这段代码可以确定执行的方式是轮询机制,接下来debug调试一下:
它这里还有一个判断,如果线程数不是2的N次方,则采用取模算法实现。
@Override
public EventExecutor next() {
return executors[Math.abs(idx.getAndIncrement() % executors.length)];
}
能力有限,如果有什么错误或者不当之处,请大家批评指正,一起学习交流!
本文为阿里云原创内容,未经允许不得转载。