美文网首页
选择器EventExecutorChooser

选择器EventExecutorChooser

作者: 赵信信官属 | 来源:发表于2019-10-18 00:23 被阅读0次

在上一节NioEventLoop创建中, 我们提到了选择器EventExecurotChooser的创建. 这一节我们详细介绍下它.
我们从代码说起

io.netty.util.concurrent.DefaultEventExecutorChooserFactory#newChooser
public EventExecutorChooser newChooser(EventExecutor[] executors) {
    if (isPowerOfTwo(executors.length)) {
        return new PowerOfTwoEventExecutorChooser(executors);
    } else {
        return new GenericEventExecutorChooser(executors);
    }
}

从代码中我们看到, 其中executors就是我们创建的NioEventLoop数组. 根据数组长度是否是2^n创建不同的选择器.为啥要这样做呢?其实还是为了性能考虑,凡是可以提高性能的地方, Netty可是从不缺席.
选择器就是为了当有新连接进入时, 通过这个选择器选择一个NioEventLoop进行'服务'. 虽然创建了不同的选择器, 但是它们选择的思路的一样的, 就是从数组中循环选择.
比如NioEventLoop数组长度是8, 加入客户端连接到服务器之后, 服务器通过选择器EventExecutorChooser选择第一个NioEventLoop为其服务, 接着第二个客户端连接到服务器, 选择器EventExecutorChooser选择第二个NioEventLoop为其服务, 以此类推, 假如第八个客户端连接到服务器, 为其服务的是第八个NioEventLoop. 那么第九个客户端连接到服务器之后, 则又由第一个NioEventLoop为其服务了. 毕竟NioEventLoop封装的Selector是多路复用也就体现在此处.

只是选择器的两个实现类采取重复循环选择NioEventLoop的方式不同而已. 那么它们的不同之处在哪里呢? 我们通过代码说明

PowerOfTwoEventExecutorChooser(EventExecutor[] executors) {
    this.executors = executors;
}
@Override
public EventExecutor next() {
    return executors[idx.getAndIncrement() & executors.length - 1];
}
GenericEventExecutorChooser(EventExecutor[] executors) {
    this.executors = executors;
}
@Override
public EventExecutor next() {
    return executors[Math.abs(idx.getAndIncrement() % executors.length)];
}

其实简单说, 就是一个通过按位与(&)操作符, 另一个通过取模(%)运算符进行选取. 因此为了效率, 大部分情况下, 我们在设置NioEventLoop数组大小时, 使用2^n可以提高性能. 但是我查看了Dubbo和RocketMQ, 它们也有使用3的情况. 这个没有统一规范.

相关文章

  • 选择器EventExecutorChooser

    ​在上一节NioEventLoop创建中, 我们提到了选择器EventExecurotChooser的创建. 这一...

  • css3选择器总结

    选择器分基本选择器和拓展选择器 基本选择器:id选择器,类选择器,元素选择器,通用选择器 拓展选择器:群组选择器,...

  • 「CSS 」选择器

    选择器简单选择器标签选择器类选择器id 选择器通配符选择器属性选择器伪类选择器其他选择器伪元素选择器组合选择器选择...

  • CSS 理解

    选择器 通用选择器: id选择器 class选择器 元素选择器 子选择器 后代选择器 伪类选择器 伪元素选择器: ...

  • CSS 学习总结

    CSS 选择器 { 样式 } 选择器:基础选择器(单个选择器物),复合选择器物 基础选择器:标签选择器,类选择器,...

  • CSS选择器

    通用选择器 元素选择器 类选择器 ID选择器 群组选择器 后代选择器 子代选择器 伪类选择器 通用选择器 元素选择...

  • CSS知识树

    css选择器 基础选择器ID选择器类选择器属性选择器元素选择器组合选择器多元素选择器 ,格式:E,F后代选择器,格...

  • CSS 选择器

    CSS选择器的概念 标签选择器 类选择器 ID选择器 类选择器与ID选择器的区别 子代选择器 后代选择器 子选择器...

  • CSS3 基本选择器

    回顾选择器 通配选择器 元素选择器 类选择器 ID选择器 后代选择器 新增基本选择器 子元素选择器(直接后代选择器...

  • ## CSS选择器

    ## CSS选择器 # 标签选择器 # id选择器 # 类选择器 # 后代选择器 # 子元素选择器 # 交集选择器...

网友评论

      本文标题:选择器EventExecutorChooser

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