其他分享
首页 > 其他分享> > Netty(2):EventLoop

Netty(2):EventLoop

作者:互联网

EventLoop

EventLoop 本质是一个单线程执行器(同时维护了一个 Selector),里面有 run 方法处理 Channel 上源源不断的 io 事件。

image-20220518171812242

它的继承关系比较复杂

EventLoopGroup

EventLoopGroup 是一组 EventLoop,Channel 一般会调用 EventLoopGroup 的 register 方法来绑定其中一个 EventLoop,后续这个 Channel 上的 io 事件都由此 EventLoop 来处理(保证了 io 事件处理时的线程安全)

EventLoopGroup 是一组 EventLoop,Channel 一般会调用 EventLoopGroup 的 register 方法来绑定其中一个 EventLoop,后续这个 Channel 上的 io 事件都由此 EventLoop 来处理(保证了 io 事件处理时的线程安全)

所以我们一般不直接操作EventLoop,而是通过EventLoopGroup去获取EventLoop

创建EventLoopGroup并获取EventLoop

        //1.创建事件循环组
        DefaultEventLoopGroup eventLoopGroup = new DefaultEventLoopGroup(2);//普通任务,定时任务
        System.out.println(eventLoopGroup.next());
        System.out.println(eventLoopGroup.next());
        System.out.println(eventLoopGroup.next());
        System.out.println(eventLoopGroup.next());

        //默认线程数
        //        DEFAULT_EVENT_LOOP_THREADS = Math.max(1, SystemPropertyUtil.getInt(
        //                "io.netty.eventLoopThreads", NettyRuntime.availableProcessors() * 2));
        NioEventLoopGroup eventExecutors = new NioEventLoopGroup();//io任务,普通任务,定时任务
        //执行普通任务
        eventExecutors.next().submit(() -> {
            System.out.println("abc");
        }).get();

        //执行定时任务
        eventExecutors.next().scheduleAtFixedRate(()-> System.out.println("111"),
                1L, 1L, TimeUnit.SECONDS);

测试结果:

image-20220519100408638

标签:Netty,group,EventLoop,System,println,new,EventLoopGroup
来源: https://www.cnblogs.com/wwjj4811/p/16288241.html