代码之家  ›  专栏  ›  技术社区  ›  Jim Rush

如何消除并行事件流的重复数据

  •  0
  • Jim Rush  · 技术社区  · 15 年前

    是否有消除并行事件流的标准方法?在我尝试重新发明轮子之前,我想知道这个问题是否有一些已知的方法。

    我的客户机组件将与两个服务器通信。每一个都提供一个接近实时的事件流(~1秒)。这些事件有时可能会出现故障。假设我能唯一地识别事件。我需要以相同的接近实时的性能向消耗代码发送一个事件流。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Jonathan Feinberg    15 年前

    关于这种问题已经写了很多文章。这是Leslie Lamport的一篇基础论文:

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

    维基百科关于操作转换理论的文章是进一步研究的完美起点:

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

    对于您的问题,您必须选择一些任意的权重来度量延迟成本与丢失事件成本。您可以维护两个优先级队列,时间顺序,传入事件的位置。您将进行合并,并在两个队列的头上进行一些延迟(以允许无序事件),并丢弃“早于”上次发送的事件的时间戳之前发生的事件。如果这不比你已经想到的更好,那么,至少你可以读到那篇很棒的兰波特论文!

        2
  •  1
  •   Maksee    15 年前

    我认为优化可能是特定于操作系统的。在您描述的任务中,我考虑了两个线程使用传入数据并将其附加到基于互斥体的具有访问权限的公共流。Linux和Win32都有类似互斥体的过程,但如果您的数据速率真的很高,它们的性能可能会很低。在本例中,我将使用数据块进行操作,这将允许不经常使用互斥。当然,有一个主线程使用数据,它也使用互斥体访问数据。