EventLoop
是一个单线程的执行器(同时维护了一个Selector),里面有run方法处理Channel上源源不断的io事件。
1.继承java.util.concurrent.ScheduledExecutorService因此包含了线程池中所有的方法。

2.继承netty自己的OrderedEventExecutor

EventLoopGroup
一般不会直接使用EventLoop,而是使用EventLoopGroup。
Channel一般会调用EventLoopGroup的register方法来绑定其中一个EventLoop,后续这个channel上的io事件都由这个EventLoop来处理(保证io事件处理时的线程安全)。
NioEventLoopGroup 与 DefaultEventLoopGroup的区别
EventLoopGroup nioEventLoopGroup = new NioEventLoopGroup();// 处理io事件、定时任务、普通任务 DefaultEventLoopGroup defaultEventLoopGroup = new DefaultEventLoopGroup(); // 定时任务、普通任务
new NioEventLoopGroup() 跟踪源码:



可以看出默认创建的线程数= 电脑cpu核数 x 2
@Slf4j
public class EventLoopGroupDemo {
    public static void main(String[] args) {
        //创建EventLoopGroup对象,指定线程数量为2
        EventLoopGroup nioEventLoopGroup = new NioEventLoopGroup(2);// 处理io事件、定时任务、普通任务
//        DefaultEventLoopGroup defaultEventLoopGroup = new DefaultEventLoopGroup(); // 定时任务、普通任务
        //获取下一个eventLoop对象
        EventLoop eventLoop1 = nioEventLoopGroup.next();
        EventLoop eventLoop2 = nioEventLoopGroup.next();
        EventLoop eventLoop3 = nioEventLoopGroup.next();
        EventLoop eventLoop4 = nioEventLoopGroup.next();
        //只有两个对象,就会循环获取,获取四次,两两相同,看对象的hashcode值
        log.info("eventLoop1={}", eventLoop1); //io.netty.channel.nio.NioEventLoop@4ec6a292
        log.info("eventLoop2={}", eventLoop2); //io.netty.channel.nio.NioEventLoop@1b40d5f0
        log.info("eventLoop3={}", eventLoop3); //io.netty.channel.nio.NioEventLoop@4ec6a292
        log.info("eventLoop4={}", eventLoop4); //io.netty.channel.nio.NioEventLoop@1b40d5f0
        //把一个普通任务提交给EventLoopGroup中某一个EventLoop去执行,异步执行
        //应用场景:
        // 1.如果当前线程的某个任务比较耗时,可以交给EventLoopGroup中的其他线程进行异步处理。
        // 2.任务从一个线程的执行权转到另一个线程。
        nioEventLoopGroup.execute(() ->{
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //[nioEventLoopGroup-2-1] INFO com.xkj.org.netty.EventLoopGroupDemo - execute common task ok
            //nioEventLoopGroup-2-1 就是 EventLoopGroup中一个EventGroup线程的名字
            log.info("execute common task ok");
        });
        //执行定时任务
        //1s后执行,间隔2s执行一次
        nioEventLoopGroup.scheduleAtFixedRate(() -> {
            // [nioEventLoopGroup-2-2] INFO com.xkj.org.netty.EventLoopGroupDemo - ok
            // nioEventLoopGroup-2-2就是 EventLoopGroup中一个EventGroup线程的名字
            log.info("ok"); 
        }, 1, 2, TimeUnit.SECONDS);
        
        log.info("main");
    }
}


















![[单机]完美国际_V155_GM工具_VM虚拟机](https://img-blog.csdnimg.cn/img_convert/55d11bea6d96a129f7a0c2dcb8bb4ca9.webp?x-oss-process=image/format,png)