美文网首页
NETTY引擎--NioEventLoopGroup

NETTY引擎--NioEventLoopGroup

作者: 小犇手K线研究员 | 来源:发表于2017-03-03 18:33 被阅读200次

    NioEventLoopGroup核心功能是管理多个NioEventLoop,似的channel均匀的注册在多个NioEventLoop中,功能比较简单,实现也比较简单。

    UML

    Paste_Image.png

    如上图所示,NioEventLoopGroup基于netty的多线程框架实现,本文不相信介绍netty的多线程框架,所以不深入到其父类中。

    NioEventLoopGroup自己的代码非常简单,如下:

    public class NioEventLoopGroup extends MultithreadEventLoopGroup {
    
        /**
         * Create a new instance using the default number of threads, the default {@link ThreadFactory} and
         * the {@link SelectorProvider} which is returned by {@link SelectorProvider#provider()}.
         */
        public NioEventLoopGroup() {
            this(0);
        }
    
        /**
         * Create a new instance using the specified number of threads, {@link ThreadFactory} and the
         * {@link SelectorProvider} which is returned by {@link SelectorProvider#provider()}.
         */
        public NioEventLoopGroup(int nThreads) {
            this(nThreads, null);
        }
    
        /**
         * Create a new instance using the specified number of threads, the given {@link ThreadFactory} and the
         * {@link SelectorProvider} which is returned by {@link SelectorProvider#provider()}.
         */
        public NioEventLoopGroup(int nThreads, ThreadFactory threadFactory) {
            this(nThreads, threadFactory, SelectorProvider.provider());
        }
    
        /**
         * Create a new instance using the specified number of threads, the given {@link ThreadFactory} and the given
         * {@link SelectorProvider}.
         */
        public NioEventLoopGroup(
                int nThreads, ThreadFactory threadFactory, final SelectorProvider selectorProvider) {
            super(nThreads, threadFactory, selectorProvider);
        }
    
        /**
         * Sets the percentage of the desired amount of time spent for I/O in the child event loops.  The default value is
         * {@code 50}, which means the event loop will try to spend the same amount of time for I/O as for non-I/O tasks.
         */
        public void setIoRatio(int ioRatio) {
            for (EventExecutor e: children()) {
                ((NioEventLoop) e).setIoRatio(ioRatio);
            }
        }
    
        /**
         * Replaces the current {@link Selector}s of the child event loops with newly created {@link Selector}s to work
         * around the  infamous epoll 100% CPU bug.
         */
        public void rebuildSelectors() {
            for (EventExecutor e: children()) {
                ((NioEventLoop) e).rebuildSelector();
            }
        }
    
        @Override
        protected EventExecutor newChild(
                ThreadFactory threadFactory, Object... args) throws Exception {
            return new NioEventLoop(this, threadFactory, (SelectorProvider) args[0]);
        }
    }
    

    如上代码所示,其都是一些初始化代码和属性设置方法,其核心方法应该是父类的next()方法,next()方法实现的功能是:每次选择下一个NioEventLoop负责注册channel和执行任务,达到所有的NioEventLoop负载均衡。

    相关文章

      网友评论

          本文标题:NETTY引擎--NioEventLoopGroup

          本文链接:https://www.haomeiwen.com/subject/ybprgttx.html