与Netty处理程序相比,使用LMAX Disruptor进行事件处理会降低性能

与Netty处理程序相比,使用LMAX Disruptor进行事件处理会降低性能,netty,nio,reactor-netty,disruptor-pattern,lmax,Netty,Nio,Reactor Netty,Disruptor Pattern,Lmax,我已经编写了一个Netty HTTP服务器 我正在找出处理Http请求的正确方法 选项:(1.网络处理器2.最大干扰器) 我在某个地方读到过,lmaxdisruptor适合异步事件处理 但在负载测试之后,使用LMAX Disruptor进行事件处理的服务器提供的吞吐量比Netty Handler低70%。潜伏期也增加了200% 我在一个8芯16gb的盒子上获得了30k qps。使用Lmax干扰器后,我获得了10k qps。 目前我的服务只是读取Json请求并返回静态响应。我只是想比较一下现在的

我已经编写了一个Netty HTTP服务器

我正在找出处理Http请求的正确方法
选项:(1.网络处理器2.最大干扰器)

我在某个地方读到过,lmaxdisruptor适合异步事件处理
但在负载测试之后,使用LMAX Disruptor进行事件处理的服务器提供的吞吐量比Netty Handler低70%。潜伏期也增加了200%
我在一个8芯16gb的盒子上获得了30k qps。使用Lmax干扰器后,我获得了10k qps。
目前我的服务只是读取Json请求并返回静态响应。我只是想比较一下现在的原始性能

我正在从SimpleChannelInboundHandler读取HttpRequest,并将其发送到LMAX Disruptor事件处理程序,并释放netty worker处理程序,其配置如下所述:

净IO线程:24个,工作线程:48个

Disruptor Disruptor=new Disruptor(new EventFactory(),65536,DaemonThreadFactory.INSTANCE)


是因为Disruptor为每个事件创建了新的守护进程线程吗?

如果您想要一个好的答案,您需要解释您的服务在做什么。在任何情况下,将工作推到另一个线程都不会使它消失,而且在大多数情况下,只会由于上下文切换而增加延迟。此外,据我所知,干扰器在多制作人设置中表现不佳。我使用的是单制作人设置。我的服务只是读取Json请求并返回静态响应。我正在尝试对其进行基准测试。因此,发行商基本上无法为这项服务增加任何价值。因此,我希望在未来为其添加处理阶段。将来自1个事件中断器的请求传递给其他人并返回响应。这有帮助吗?它还为每条消息创建新的守护进程线程。Can';我们有线程池,它使用线程池来提高延迟并避免垃圾收集。@NandishKotadia您的处理程序使用的EventExecutorGroup是什么?disruptor的优势在于,因为它本质上是BlockingQueue的替代品,所以您可以编写阻塞代码,但不能使用某些“ExecutorGroups”。TLDR您的netty处理程序能够执行阻塞吗?如果您想要一个好的答案,您需要解释您的服务在做什么。在任何情况下,将工作推到另一个线程都不会使它消失,而且在大多数情况下,只会由于上下文切换而增加延迟。此外,据我所知,干扰器在多制作人设置中表现不佳。我使用的是单制作人设置。我的服务只是读取Json请求并返回静态响应。我正在尝试对其进行基准测试。因此,发行商基本上无法为这项服务增加任何价值。因此,我希望在未来为其添加处理阶段。将来自1个事件中断器的请求传递给其他人并返回响应。这有帮助吗?它还为每条消息创建新的守护进程线程。Can';我们有线程池,它使用线程池来提高延迟并避免垃圾收集。@NandishKotadia您的处理程序使用的EventExecutorGroup是什么?disruptor的优点是,因为它本质上是BlockingQueue的替代品,所以您可以编写阻塞代码,但不能使用某些“ExecutorGroup”。TLDR您的netty处理程序能够执行阻塞吗?