
线程组创建流程分析:
1. 创建线程组EventLoopGroup
2. 根据创建EventLoopGroup 线程组时设置的参数决定在线程组内创建线程的个数,如未写参数,则默认创建的线程为当前主机CPU线程数*2,在实际案例中,一般bossGroup线程组会人为设置参数为创建1个线程,而workGroup一般选择默认线程数。
3. 根据配置的线程数循环,初始化每个线程NioEventLoop,以及创建与线程配套的任务队列TaskQueue及选择器select。
二. 线程组创建主要源码跟踪 (一)NioEventLoopGroup线程组的创建
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);
}
}
protected MultithreadEventLoopGroup(int nThreads, Executor executor, Object... args) {
super(nThreads == 0 ? DEFAULT_EVENT_LOOP_THREADS : nThreads, executor, args);
}
protected MultithreadEventLoopGroup(int nThreads, ThreadFactory threadFactory, Object... args) {
super(nThreads == 0 ? DEFAULT_EVENT_LOOP_THREADS : nThreads, threadFactory, args);
}
protected MultithreadEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory,
Object... args) {
super(nThreads == 0 ? DEFAULT_EVENT_LOOP_THREADS : nThreads, executor, chooserFactory, args);
}
}
(二)NioEventLoop的创建
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)