gpt4 book ai didi

java - 关于高性能流数据处理的问题

转载 作者:搜寻专家 更新时间:2023-10-31 01:56:53 24 4
gpt4 key购买 nike

我有一个接收流数据的套接字连接。每天的消息数约为 1.5 亿条。收到消息后,我需要处理它们。由于消息数量相当大。我正在对消息处理代码进行多线程处理。现在我有 8 个线程,有 8 个消息队列。套接字进程会将消息依次放入这些队列中。每个进程只需要处理自己队列中的消息。

我现在的问题是我的队列溢出了。

我应该有更多队列吗?所有线程都将使用同步方法写入共享对象。更多的队列是否会相互影响并使事情变得更糟?

我应该有更大的缓冲区吗?这些似乎是安全的,但我真的想更快地处理消息。

我应该改变我的设计吗?有什么好的推荐吗?要遵循的指南?

欢迎任何评论。

最佳答案

为什么要使用单独的队列?分配工作的通常方法是拥有 1 个共享队列,所有工作人员都从中读取。在 Java 中,您可以使用共享的 BlockingQueue 轻松地做到这一点。这样,工作可以更均匀地分配(工作人员不会在繁忙时从队列中拉出工作)。在您的策略中,缓慢的工作人员队列最终可能会积压。为了防止队列溢出,您可以在队列上设置最大大小,然后当您的积压变得太大时,生产者将暂停。

您提到您希望整个过程进行得更快。虽然上述建议可能有帮助也可能没有帮助,真正解决问题的唯一方法是在分析器下运行系统并查看瓶颈在哪里(很多时候,这不是您认为的那样).否则,您可能会花费大量时间优化最终无济于事的代码。有很多适用于 java(netbeans、jvisualvm、eclipse)和 c++ (valgrind) 的免费分析器。 yourkit java profiler 是一个很棒的 java 非免费分析器。

关于java - 关于高性能流数据处理的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6385029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com