netty--EventLoop组件
EventLoop
EventLoop其实就是一个单线程执行器,同时内部维护了一个Selector(selector是多路复用器),里面的run方法处理Channel上源源不断的IO事件,而EventLoopGroup就是一组EventLoop,Channel一般会调用EventLoopGroup的register方法来绑定一个EventLoop,后续这个Channel上的io事件都会由这个EventLoop来处理保证线程安全
NioEventLoopGroup
NioEventLoopGroup能处理io事件,也能处理普通任务和定时任务
无参构造器
发现又传个了另一个构造器。
一点一点点下去发现后面判断了如果是0的话就用一个默认线程数
Math.max(1, SystemPropertyUtil.getInt("io.netty.eventLoopThreads", NettyRuntime.availableProcessors() * 2))
默认线程数是处理器核心数*2,然后和1去比较用数字较大的,也就是说最少都是一个线程
我的电脑是8核,8*2=16个线程
获取下一个EventLoop事件循环对象
采用轮询的机制
@Slf4j
public class MultiThreadServer {
public static void main(String[] args) {
// 设置线程数2个 那么事件循环对象就是2个
NioEventLoopGroup nioEventLoopGroup = new NioEventLoopGroup(2);
// 采用轮询的机制
System.out.println(nioEventLoopGroup.next());
System.out.println(nioEventLoopGroup.next());
System.out.println(nioEventLoopGroup.next());
System.out.println(nioEventLoopGroup.next(