假设系统A提供了一些输出。该输出用作系统B的输入。系统A产生的速率快于系统B消耗它的速率。我们怎样才能实现这个目标?
系统A以10mbps的速度发送视频,系统b只能占用4mbps。我们可以实现这一点。还有连续的视频流吗?通过套接字进行通信。 TCP / IP。
有人知道java中的逻辑吗?有一个双缓冲解决方案?我不知道。
答案 0 :(得分:5)
这是一个名为Producer-Consumer的已知问题:http://en.wikipedia.org/wiki/Producer-consumer_problem 您可以在问题建议时使用线程 - 您可以让系统A在不同的线程中运行,当它有意义时,您可以使该线程休眠。 从硬件中已知的其他解决方案可能是使用缓冲区,中间存储器。
答案 1 :(得分:1)
这取决于。如果系统A持续产生的输出超过系统B可以处理的输出,则有两种选择:
如果系统A产生输出的速率暂时大于系统B可以处理它的速率,则应实施排队解决方案。系统A将其输出存储在队列中,系统B弹出队列中的项目。
答案 2 :(得分:1)
如果你学习操作系统,电信或电子学,你会发现buffers对此有好处。
它们可以是一种应对速度暂时差异的弹性方式。如果速度差是永久性的,并且缓冲区的大小有限,那么系统A最终将不得不暂停或冒失去输出的风险。
答案 3 :(得分:1)
有两个不同的案例:
第二种情况可以通过排队(JMS)解决,第一种情况更难。
如果你可以充分扩展B上的硬件,那么就可以了。
您可以优化B中最慢的部分(优化代码),但您必须再次进行各种测试。
您可以检查是否可以使用多个B(负载平衡),但应用程序应该支持(多个实例更新数据库中的相同数据并不好:)。
这完全取决于具体的负载分布和应用程序的体系结构。
答案 4 :(得分:0)
你要么改进与否,要么你有系统B等待系统A发送消息或其他什么......你可以使用线程等待。也许如果你能提供更多细节,有人可以回答。如果你说我如何改进系统B,你希望我们回应什么,我们对这两个系统都一无所知。
答案 5 :(得分:0)
提高系统B性能或降低系统性能: - )
答案 6 :(得分:0)
您可以使用Java Messaging Service(JMS)之类的解决方案。
http://java.sun.com/products/jms/
这允许通过消息队列进行异步通信。系统A和B完全相互独立,不必以相同的速度处理消息。
答案 7 :(得分:0)
太一般的问题。我建议您查看这些框架:Apache Camel,Spring Integration
答案 8 :(得分:0)
系统A的输出如何提供给系统B?如果它们位于不同的JVM中,则可以使用操作系统管道。类似的东西:
java SystemA | java SystemB
当操作系统远远超过SystemB时,它将自动暂停SystemA。如果它们在同一个JVM中,则可以使用PipeInputStream和PipeOutputStream来实现相同的功能。
如果SystemA的输出不是流,那么您将不得不使用其他答案中建议的某种结构化数据方法。