【问题标题】:Can we use single thread to consume multiple disruptor?我们可以使用单线程来消耗多个中断器吗?
【发布时间】:2018-03-27 07:39:42
【问题描述】:

我有来自不同来源(多播、tcp)的不同数据。 我打算使用不同的 Disruptor 单独管理每种类型的数据,而我想通过单个线程使用所有这些数据。

这种型号的 Disruptor 是为这种型号设计的吗? 如果是这样,则 Disruptor 构造函数带有 Executor / ThreadFactory ,这意味着里面的数据应该由线程池管理。我们如何将同一个线程共享给多个破坏者?

【问题讨论】:

  • 你能指定单线程处理的目的是什么吗?也许您可以在链的末尾使用单个环形缓冲区和单个事件处理程序。它应该模拟单个线程的行为并一一处理事件。如果您想并行处理事件,请使用工作处理程序。

标签: disruptor-pattern


【解决方案1】:

如果没有您的努力,disruptor 库可能无法做到这一点;我不确定整个 API 是什么样的。至少在环形缓冲区上有一个 api 来获取(序列)和获取光标。

但如果您理解这种模式,显然消费者线程不会在任何 API 中被阻塞,因此自定义实现可以轻松轮询各种环形缓冲区,尤其是代替旋转忙等待循环。

但是,您可能会因为从一个任务+内存跳转到另一个任务而失去一些 cpu 缓存局部性。

【讨论】:

    猜你喜欢
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2010-10-09
    • 2016-05-22
    相关资源
    最近更新 更多