示例#1
0
 private void fillRingBuffer(long expectedNumberMessages) throws InterruptedException {
   for (long i = 0; i < expectedNumberMessages; i++) {
     long sequence = ringBuffer.next();
     StubEvent event = ringBuffer.getPreallocated(sequence);
     event.setValue((int) i);
     ringBuffer.publish(sequence);
   }
 }
  @Override
  protected long runDisruptorPass() throws InterruptedException {

    resetCounters();
    RingBuffer<ValueEvent> ringBuffer = workerPool.start(EXECUTOR);
    long start = System.currentTimeMillis();

    for (long i = 0; i < ITERATIONS; i++) {
      long sequence = ringBuffer.next();
      ringBuffer.getPreallocated(sequence).setValue(i);
      ringBuffer.publish(sequence);
    }

    workerPool.drainAndHalt();
    long opsPerSecond = (ITERATIONS * 1000L) / (System.currentTimeMillis() - start);

    assertEquals(ITERATIONS, sumCounters());

    return opsPerSecond;
  }