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

问题描述 投票:0回答:1

我编写了一个 Netty HTTP 服务器。

我正在找出处理 Http 请求的正确方法
选项:(1. Netty 处理程序 2. LMAX 干扰器)。

我在某处读到 LMAX Disruptor 对于异步事件处理很有用。
但在负载测试之后,使用 LMAX Disruptor 进行事件处理的服务器提供的吞吐量比 Netty Handler 低 70%。而且延迟也增加了 200%。
我在 8 核 16GB 盒子上获得了 30k qps。使用 Lmax Disruptor 后,我获得了 10k qps。
目前我的服务只是读取 Json 请求并返回静态响应。我只是想比较目前的原始性能。

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

Netty IO 线程:24 和工作线程:48

Disruptor disruptor = new Disruptor<>(new EventFactory(), 65536, DaemonThreadFactory.INSTANCE);


是因为 Disruptor 为每个事件创建新的 Daemon 线程吗?

netty nio reactor-netty disruptor-pattern lmax
1个回答
0
投票

要从破坏者那里获得性能,您首先需要有机械同情心......然后确保:

  1. 您已经预先分配了事件(请从较小的数字开始。例如 512)。理想情况下,它们应该适合缓存
  2. 确保在给事件设置数据时没有进行任何分配
  3. 将任意数量的处理程序附加到事件。他们将在每场比赛中一一进行。因此,您的第一个处理程序可以将其结果传递给事件实例,第二个处理程序可以从那里读取它,并且不需要任何锁定。

为了获得更准确的答案,请提供一些有关如何创建干扰器以及您的处理处理程序是什么样子的基本信息。

© www.soinside.com 2019 - 2024. All rights reserved.