Netty源码分析——EventLoopGroup建立

时间:2020-03-22 13:40:23   收藏:0   阅读:54

在上一篇中的简单代码中开头的两行代码是

1         EventLoopGroup boss = new NioEventLoopGroup(1);
2         EventLoopGroup worker = new NioEventLoopGroup();

服务端应用要创建首先要创建两个EventLoopGroup ,为什么是两个EventLoopGroup ,这就涉及netty的核心设计思想——主从Reactor模型。这里不展开说,内容比较多,可以自行学习。每个EventLoopGroup 可以包含一个或多个EventLoop,每一个EventLoop简单来说的就是一个死循环的线程,这个线程循环监听一个通道的所有事件,这个模式下面其他流程中也会反复提到。下面开始追代码。

说明一下,上面的两个构造函数一个有参数一个无参数,无参数的通过获取本机cpu的核数(注意是核数不是个数,例如我的电脑4个cpu,每个cpu都是双核的,所以无参的时候应该创建8个EventLoop)来决定创建线程的个数,有参数就是指定在这个EventLoopGroup 中创建具体个数的EventLoop。

  protected MultithreadEventLoopGroup(int nThreads, ThreadFactory threadFactory, Object... args) {
        super(nThreads == 0 ? DEFAULT_EVENT_LOOP_THREADS : nThreads, threadFactory, args);
    }
    static {
        DEFAULT_EVENT_LOOP_THREADS = Math.max(1, SystemPropertyUtil.getInt(
                "io.netty.eventLoopThreads", Runtime.getRuntime().availableProcessors() * 2));  //获取本机cup核数

        if (logger.isDebugEnabled()) {
            logger.debug("-Dio.netty.eventLoopThreads: {}", DEFAULT_EVENT_LOOP_THREADS);
        }
    }
    protected MultithreadEventExecutorGroup(int nThreads, Executor executor, Object... args) {
        this(nThreads, executor, DefaultEventExecutorChooserFactory.INSTANCE, args);
    }

 

原文:https://www.cnblogs.com/chirsli/p/12539624.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!