首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于高性能流数据处理的问题

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

Stack Overflow用户
提问于 2011-06-17 19:23:33
回答 2查看 335关注 0票数 2

我有一个接收流数据的套接字连接。每天的消息数大约是150Mil。收到消息后,我需要对它们进行处理。因为消息数量相当大。我正在多线程处理消息处理代码。现在我有8个线程,有8个消息队列。套接字进程将按顺序将消息放入这些队列。每个进程只需要在自己的队列中处理消息。

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

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

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

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

欢迎提出任何意见。

EN

回答 2

Stack Overflow用户

发布于 2011-06-17 19:35:44

为什么要使用单独的队列?分配工作的通常方法是有一个共享队列,所有的工作者都从这个队列中读取。在java中,你可以使用一个共享的BlockingQueue很容易地做到这一点。这样,作业可以更均匀地分布(如果工作繁忙,则不会将作业从队列中拉出)。在您的策略中,缓慢的工作队列可能会导致积压。为了防止队列溢出,您可以设置队列的最大大小,然后生产者将在您的积压工作变得太大时暂停。

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

票数 3
EN

Stack Overflow用户

发布于 2011-06-17 19:36:21

是否每个处理线程在处理完一条消息后都会写入共享对象?这可能会造成瓶颈。在写入共享对象之前,尝试在每个线程中累积一些临时结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6385029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档