EventLoopGroup 是一组 EventLoop 的抽象,Netty 为了更好的利用多核 CPU 资源,一般会有多
个 EventLoop 同时工作,每个 EventLoop 维护着一个 Selector 实例。
一. 线程组创建源码流程分析

线程组创建流程分析:
1. 创建线程组EventLoopGroup
2. 根据创建EventLoopGroup 线程组时设置的参数决定在线程组内创建线程的个数,如未写参数,则默认创建的线程为当前主机CPU线程数*2,在实际案例中,一般bossGroup线程组会人为设置参数为创建1个线程,而workGroup一般选择默认线程数。
3. 根据配置的线程数循环,初始化每个线程NioEventLoop,以及创建与线程配套的任务队列TaskQueue及选择器select。
二. 线程组创建主要源码跟踪
(一)NioEventLoopGroup线程组的创建



/**
* Abstract base class for {@link EventLoopGroup} implementations that handles their tasks with multiple threads at
* the same time.
*/
public abstract class MultithreadEventLoopGroup extends MultithreadEventExecutorGroup implements EventLoopGroup {
private static final InternalLogger logger = InternalLoggerFactory.getInstance(MultithreadEventLoopGroup.class);
private static final int DEFAULT_EVENT_LOOP_THREADS;
static {
//默认线程数量为处理器数*2
DEFAULT_EVENT_LOOP_THREADS = Math.max(1, SystemPropertyUtil.getInt(
"io.netty.eventLoopThreads", NettyRuntime.availableProcessors() * 2));
if (logger.isDebugEnabled()) {
logger.debug("-Dio.netty.eventLoopThreads: {}", DEFAULT_EVENT_LOOP_THREADS);
}
}
/**
* @see MultithreadEventExecutorGroup#MultithreadEventExecutorGroup(int, Executor, Object...)
* 判断nThreads是否等于0,如果等于0取24,如果不等于0,则取传入进来的nThreads线程值
*/
protected MultithreadEventLoopGroup(int nThreads, Executor executor, Object... args) {
super(nThreads == 0 ? DEFAULT_EVENT_LOOP_THREADS : nThreads, executor, args);
}
/**
* @see MultithreadEventExecutorGroup#MultithreadEventExecutorGroup(int, ThreadFactory, Object...)
*/
protected MultithreadEventLoopGroup(int nThreads, ThreadFactory threadFactory, Object... args) {
super(nThreads == 0 ? DEFAULT_EVENT_LOOP_THREADS : nThreads, threadFactory, args);
}
/**
* @see MultithreadEventExecutorGroup#MultithreadEventExecutorGroup(int, Executor,
* EventExecutorChooserFactory, Object...)
*/
protected MultithreadEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory,
Object... args) {
super(nThreads == 0 ? DEFAULT_EVENT_LOOP_THREADS : nThreads, executor, chooserFactory, args);
}
}
(二)NioEventLoop的创建





本文深入剖析Netty的线程组创建源码,详细讲解从EventLoopGroup到NioEventLoop的创建过程。线程组创建涉及线程数量的确定,通常依据CPU线程数设定,BossGroup常设为1线程,WorkGroup使用默认配置。主要源码跟踪包括NioEventLoopGroup和NioEventLoop的初始化,包括任务队列和选择器的设置。
176

被折叠的 条评论
为什么被折叠?



