「这是我参与11月更文挑战的第30天,活动详情查看:2021最后一次更文挑战」。
点赞再看,养成习惯👏👏
1、NioEventLoopGroup
1 | java复制代码EventLoopGroup bossGroup = new NioEventLoopGroup(1); |
初始化的时候如果有传线程数量的话以传的为主,如果没有传含有的子线程NioEventLoop的个数默认为cpu核数的两倍。
1 | java复制代码private static final int DEFAULT_EVENT_LOOP_THREADS = |
这里的children是NioEventLoopGroup的一个成员变量,通过for循环一个个赋值,
1 | java复制代码this.children = new EventExecutor[nThreads]; |
所以跟上面介绍的类似,一个NioEventLoopGroup里面有多个NioEventLoop
1 | java复制代码NioEventLoopGroup.class |
一个NioEventLoop里面有Selector和TaskQueue
1 | java复制代码SingleThreadEventExecutor.class |
2、ServerBootstrap
1 | java复制代码//创建服务器端的启动对象 |
上面本质就是通过链式编程的形式给ServerBootstrap的各个成员变量赋初值,以便在后续使用。
3、NioServerSocketChannel
NioServerSocketChannel初始化主要返回ServerSocketChannel,这步也是对nio的封装。
1 | java复制代码NioServerSocketChannel.class |
同时也执行this.pipeline = this.newChannelPipeline();为该成员变量pipeline赋初始值,通过pipeline将各个handler串连起来,这里只是初始化tail和head,后续调用的时候会使用到。
1 | java复制代码protected DefaultChannelPipeline(Channel channel) { |
同时也将该channel设置为非阻塞和接收连接,也是对nio的封装
1 | java复制代码protected AbstractNioChannel(Channel parent, SelectableChannel ch, int readInterestOp) { |
4、源码剖析图:
本文转载自: 掘金