一张图让你看明白Nettty EventLoop是个什么东东

来源:互联网 发布:php代替session 编辑:程序博客网 时间:2024/04/29 13:14

说明一下:

EventExecutorGrop,这个接口没啥,只是增加了一些方法,比如next(), shutdownGracefully()。

EventExecutor,这个接口也没啥,直接继承于EventExecutorGrop,添加了几个功能方法而已。

EventLoopGroup,这个接口也没啥,直接继承于EventExecutorGrop,添加了一个典型的方法,register()。

EventLoop,这个接口也没啥,直接继承于EventLoopGroup, OrderedEventExecutor, 添加了几个功能方法而已。

所以,这4个接口,是一个东西,说白了,就是一个Executor,可以执行task,也可以定时执行task,只不过添加了register(channel),next()功能,正因为有了next(),返回一个EventExecutor,或EventLoop,所以,本身就是一个线程池,来看看next()的实现,这是轮询的方式:


从上图,还可以看到,EventLoop就一个有用的实现类,它是SingleThreadEventLoop,其实就是个SingleThreadEventExecutor。

SingleThreadEventExecutor是个单线程类,内部有一个taskQueue,所有的任务,都是先加到这个taskQueue中,再按task添加的顺序执行。

SingleThreadEventLoop的具体实现类,比如NioEventLoop还可以设置ioRatio,执行原理,很简单,反正是依次执行taskQueue中的任务,计算执行时间即可,具体请看此类r的un()方法。

关于netty里的pipeline

这个东西很好理解,记住以下,再看源代码。

pipeline分inbound和outbound。

凡是read操作,都是inbound,凡是write操作,都是outbound。

read-->inbound都是从head到tail依次执行handler,write-->outbound都是从tail到head依次执行handler。

原创粉丝点击