Jetty ServerConnector中的默认选择器和接收器

时间:2017-03-20 10:55:27

标签: java eclipse jetty nio

根据官方documentation,默认的选择器数量等于可用核心数量。

  

默认的选择器数量等于JVM可用的处理器数量,即使所有使用的连接都在回调任务中执行重要的非阻塞工作,也应该能够实现最佳性能。

但是,查看代码时,默认选择器数量似乎是可用内核数量的一半

public ServerConnector(
    @Name("server") Server server,
    @Name("executor") Executor executor,
    @Name("scheduler") Scheduler scheduler,
    @Name("bufferPool") ByteBufferPool bufferPool,
    @Name("acceptors") int acceptors,
    @Name("selectors") int selectors,
    @Name("factories") ConnectionFactory... factories)
{
    super(server,executor,scheduler,bufferPool,acceptors,factories);
    _manager = newSelectorManager(getExecutor(), getScheduler(),
        selectors>0?selectors:Math.max(1,Math.min(4,Runtime.getRuntime().availableProcessors()/2)));
    addBean(_manager, true);
    setAcceptorPriorityDelta(-2);
}

接受者的数量存在类似的差异。文档状态

  

默认的接受器任务数是最小值1和可用CPU数量的一半。拥有更多接受器可以减少看到高速率新连接的服务器的延迟(例如,没有保持活动的HTTP / 1.0)。通常,默认值足以用于现代持久性协议(HTTP / 1.1,HTTP / 2等)

但代码说不然

    if (acceptors < 0)
        acceptors=Math.max(1, Math.min(4,cores/8));

这是处理hyperthreading还是还有其他原因?即使这是hyperthreading的原因,接受者的数量应该是cores / 4。有人可以解释我在这里缺少什么吗?

0 个答案:

没有答案