Netty之EventLoop

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

1、什么是EventLoop

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

2、什么是EventLoopGroup

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

NioEventLoopGroupeventExecutors=newNioEventLoopGroup();

NioEventLoopGroup默认线程数为当前CPU核心数*2;如果有传参则以传参为准。

NioEventLoopGroup支持IO事件,普通任务事件,定时任务事件。

示例:

packagenetty.c2;
importio.netty.channel.nio.NioEventLoopGroup;
importjavafx.scene.layout.GridPane;
importjava.util.concurrent.TimeUnit;
publicclassTestEventLoop {
publicstaticvoidmain(String[] args) {
NioEventLoopGroupeventExecutors=newNioEventLoopGroup(2);
System.out.println(eventExecutors.next());
System.out.println(eventExecutors.next());
System.out.println(eventExecutors.next());
System.out.println(eventExecutors.next());
// 执行普通任务//        eventExecutors.next().submit(() -> {//            try {//                System.out.println("thread");//                Thread.sleep(1000);//            } catch (InterruptedException e) {//                e.printStackTrace();//            }//        });//        System.out.println("main");// 执行定时任务eventExecutors.next().scheduleAtFixedRate(() -> {
try {
System.out.println("thread");
Thread.sleep(1000);
            } catch (InterruptedExceptione) {
e.printStackTrace();
            }
        }, 0, 1, TimeUnit.SECONDS);
    }
}

3、EventLoop和Channel

eventLoop和channel进行了绑定。

image.png

考虑一个问题:

如果一个work可以绑定多个channel。那么如果某个channel上的handler执行过久,就直接影响work上其他线程的执行时间,怎么处理?

解法:创建一个独立的EventLoopGroup。channel.pipeline().addLast(新的group, "xxx", new ChannelInboundHandlerAdapter(){})。要注意handler的顺序。

image.png

image.png

剖析:如果两个handler绑定的是同一个线程,那么就直接调用;否则,把要调用的代码封装为一个任务对象,由下一个handler线程来调用(切换线程)。

相关文章
|
3月前
|
设计模式 网络协议 Java
Netty | 一起来了解了解Netty吧
Netty | 一起来了解了解Netty吧
31 0
|
7月前
netty练习
netty练习
27 0
|
8月前
|
消息中间件 网络协议 Dubbo
Netty是什么,为什么要使用Netty?
最近,也不知道什么原因,经常有粉丝问我关于Netty的问题。难道是大厂面试更卷了,开始关注更加底层的框架了?先不深究什么原因了,今天,我给大家分享一下什么是Netty,它能解决什么问题?
46 0
|
9月前
|
监控 安全 Java
Netty之EventLoop 解读
Netty之EventLoop 解读
|
9月前
|
缓存 Java 测试技术
Netty实战(七)EventLoop和线程模型
简单地说,线程模型指定了操作系统、编程语言、框架或者应用程序的上下文中的线程管理的关键方面。
98 0
|
Java API 调度
Netty组件EventLoopGroup和EventLoop源码分析
Netty组件EventLoopGroup和EventLoop源码分析
50 0
|
设计模式 安全 Java
Netty是什么?怎么学?
Netty是什么?怎么学?
135 0
|
安全
关于netty的EventLoop
关于netty的EventLoop
关于netty的EventLoop
|
缓存 Java 测试技术
【Netty】EventLoop和线程模型
在学习了ChannelHandler和ChannelPipeline的有关细节后,接着学习Netty的EventLoop和线程模型。
173 0
【Netty】EventLoop和线程模型
|
存储 前端开发
netty系列之:EventLoop,EventLoopGroup和netty的默认实现
netty系列之:EventLoop,EventLoopGroup和netty的默认实现
netty系列之:EventLoop,EventLoopGroup和netty的默认实现