2009-10-05 37 views
0

是否有标准的方法来删除并行事件流?在我试图重新发明轮子之前,我想知道这个问题是否有一些已知的方法。如何重复数据删除并行事件流

我的客户端组件将与两台服务器通信。每个人都提供接近实时的事件流(〜1秒)。这些事件偶尔会出现故障。假设我可以唯一标识事件。我需要以相近的实时性能将单个事件流发送到消费代码。

回答

1

关于这类问题已经写了很多。这里有一个基础性文件,由莱斯利·兰波特:

http://research.microsoft.com/en-us/um/people/lamport/pubs/pubs.html#time-clocks

上操作转换理论维基百科的文章是进一步研究的非常好的起点:

http://en.wikipedia.org/wiki/Operational_transformation

至于你的问题,你必须选择一些任意的权重来衡量延迟成本与下降事件的成本。您可以维护两个优先级队列,按时间排序,传入事件发生。你会做一个合并 - 在两个队列头上拖延一段时间(以允许无序事件),并丢弃发生在你最后发送的任何事件的时间戳之前的事件。如果那不比你想象的要好,至少你可以阅读那本酷酷的Lamport纸!

+0

该文件很有趣,并突出了问题的复杂性。我期待看看是否有其他选项给出了我的问题的某些特定领域方面,可能会更容易实施。谢谢。 – 2009-10-06 20:13:50

+0

哦。那么,我的答案的最后一段就是那个易于实现的解决方案! – 2009-10-06 20:16:35

1

我认为优化可能是操作系统特定的。从你描述的任务来看,我认为两个线程会消耗传入的数据并将其附加到基于互斥体的具有访问权限的公共流中。 Linux和Win32都有类似互斥体的程序,但是如果数据速率非常好,它们的性能可能会降低。在这种情况下,我会通过数据块进行操作,从而不会经常使用互斥锁。当然,有一个主线程会使用数据,并且它也可以通过互斥锁访问它。