【问题标题】:(LMAX disruptor)How to get data by myself not by callback?(LMAX破坏者)如何自己获取数据而不是通过回调?
【发布时间】:2015-01-21 11:22:49
【问题描述】:

我了解到 LMAX 中断器是一个高性能的线程间消息传递库。 但是当我尝试使用它时,我发现事件处理程序使用回调方法来处理数据。

void onEvent(T event,
       long sequence,
       boolean endOfBatch)
         throws java.lang.Exception

当发布者向 RingBuffer 发布事件时调用

但是如果我不使用回调来获取数据,我自己写了一个while(true)来获取数据,我该怎么办?

谢谢!

【问题讨论】:

  • 你的问题不是很清楚——你想达到什么目的?你的“自己的方法”是什么意思?
  • @Paolo,我不想使用回调方式获取数据,我想使用 while(true) 获取数据,我该怎么办?谢谢。
  • 您应该编写回调,以便将事件推送到队列中。然后,您可以遍历队列。

标签: java lmax


【解决方案1】:

您应该编写回调,以便将事件推送到队列中。然后您可以遍历队列。

Queue<Event> queue = new ArrayBlockingQueue(10);

void onEvent(Event event,
        long sequence,
        boolean endOfBatch)
        throws java.lang.Exception {
    queue.add(event);
}

public void test() {
    for ( Event event : queue ) {
        // Your stuff here.
    }
}

【讨论】:

  • 这样会不会减慢处理速度?
  • @davidzhao - 当然可以 - 如果你需要最大速度去裸机并使用回调 - 如果你需要在它上面做一些像这样的 flim-flam 你必须期待一个缺点.也就是说 - 不应该有太多的速度打击 - 可能无法测量。
猜你喜欢
  • 2018-01-23
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 2020-05-05
  • 2017-06-13
相关资源
最近更新 更多