七 Netty 学习:NioEventLoop 对应线程的创建和启动源码说明

原文地址:
博客园:Netty 学习(七):NioEventLoop 对应线程的创建和启动源码说明
CSDN:Netty 学习(七):NioEventLoop 对应线程的创建和启动源码说明
说明在 Netty 服务端代码中,我们一般会创建了两个 NioEventLoopGroup:bossGroup 和 workerGroup
其中: bossGroup用于监听端口,接收新连接的线程组;workerGroup 用于处理每一个连接的数据读写的线程组 。
bossGroup 创建第一个 NioEventLoop 线程NioEventLoop 的启动入口在AbstractUnsafe
        @Override        public final void register(EventLoop eventLoop, final ChannelPromise promise) {            ......            AbstractChannel.this.eventLoop = eventLoop;            if (eventLoop.inEventLoop()) {                register0(promise);            } else {                try {                    eventLoop.execute(new Runnable() {                        @Override                        public void run() {                            register0(promise);                        }                    });                } catch (Throwable t) {                    logger.warn(                            "Force-closing a channel whose registration task was not accepted by an event loop: {}",                            AbstractChannel.this, t);                    closeForcibly();                    closeFuture.setClosed();                    safeSetFailure(promise, t);                }            }        }其中inEventLoop()方法调用的是AbstractEventExecutor的实现
    @Override    public boolean inEventLoop() {        return inEventLoop(Thread.currentThread());    }

经验总结扩展阅读