我正在构建一个简单的反应式服务器,它应该使用来自多个客户机的传入protobuf/protostuff消息,在这些客户机上执行一些业务逻辑,并可能向其他客户机发送fire和forget消息。我想在Netty中实现传输和解码部分。我的问题是:在性能方面,是否有必要将解码消息发布到中断器的环形缓冲区,或者中断器提供的额外性能将被内部Netty调度抵消?我应该为Netty提供两个线程(一个用于“接受”,另一个用于“连接”组)还是只提供一个更好?也许,我应该在Netty的处理程序中按长度字段分割消息,然后在Disruptor的处理程序中执行解码?
取决于;)
disruptor允许您解耦各种不同的操作,并可能并行执行它们。因此,问题是您的业务逻辑有多昂贵,您的工作量有多大?中断器用于在线程之间传输数据,特别是可能以不同消息速率运行的线程。也就是说,当消费线程忙于处理最后一条消息时,它允许生产线程产生一系列消息。
例如,如果您还希望将消息持久化到数据库并继续发送结果,则可以将消息发布到“出站”ringbuffer,并让您的netty代码和DB持久化器从中使用。
在Netty的event循环
中花费的时间越少,可以处理的客户端就越多,或者传输级别的消息量就越大。
问题内容: 我有一个模块,负责读取,处理和将字节写入磁盘。字节通过UDP传入,并且在组装完各个数据报之后,要处理并写入磁盘的最终字节数组通常在200字节至500,000字节之间。有时,组装后会有字节数组超过500,000个字节,但是这些数组相对较少。 我目前正在使用的方法。我还尝试将包裹在中,包括使用接受缓冲区大小作为参数的构造函数。 看来,使用会趋向于稍微提高性能,但是我才刚刚开始尝试使用不同的
问题内容: 使用“抽象方法”有什么意义?抽象类不能实例化,但是抽象方法呢?他们只是在这里说“您必须实现我”,如果我们忘记了它们,编译器会抛出错误? 这还意味着其他吗?我还阅读了有关“我们不必重写相同的代码”的内容,但是在抽象类中,我们仅“声明”了抽象方法,因此我们将不得不在子类中重写代码。 您能帮我多了解一点吗?我检查了有关“抽象类/方法”的其他主题,但没有找到答案。 问题答案: 除了提醒您必须实
我试图在java应用程序中使用log4j2与干扰器。我的类路径中有以下jar文件: log4j-api-2.0-rc2。罐子 在我的Java类中,我将执行以下测试: 我的log4j2。xml文件如下所示: 当我运行应用程序时,出现以下错误(没有日志输出):
如何监控LMAX Disruptor?假设我有3个环缓冲区,并希望提供一个用户界面来提供环缓冲区的信息。
有什么理由使用而不是吗?
问题内容: 在有两个线程对其进行读/写操作并且不希望取出锁的开销(或潜在的死锁风险)的情况下,有时会使用实例变量。例如,计时器线程会定期更新一个int ID,该int ID在某些类中作为getter公开: 我的问题:鉴于JLS只能保证32位读取将是原子有任何一点 曾经 使用挥发性长时间?(即64位)。 警告 :请不要回答说使用over 是预先优化的情况;我很清楚如何/何时使用,但在某些情况下更可取