/** * Non blocking. Returns immediately if Q is empty. Returns number of elements consumed from Q */ public int consume(JCQueue.Consumer consumer) { return consume(consumer, continueRunning); }
@Override public void run() { Handler handler = new Handler(); long start = System.currentTimeMillis(); while (!Thread.interrupted()) { int x = inq.consume(handler); if (x == 0) { LockSupport.parkNanos(1); } } runTime = System.currentTimeMillis() - start; }
public SmartThread makeTransferThread() { return Utils.asyncLoop(() -> { if (transferQueue.consume(this) == 0) { return 1L; } return 0L; }); }
@Override public void run() { long start = System.currentTimeMillis(); Handler handler = new Handler(); while (!Thread.interrupted()) { ackerInQ.consume(handler); } runTime = System.currentTimeMillis() - start; }
@Override public void run() { Handler handler = new Handler(); long start = System.currentTimeMillis(); while (!Thread.interrupted()) { int x = q.consume(handler); if (x == 0) { LockSupport.parkNanos(1); } } runTime = System.currentTimeMillis() - start; }
@Override public void run() { try { Handler handler = new Handler(); long start = System.currentTimeMillis(); while (!Thread.interrupted()) { int x = spoutInQ.consume(handler); ackerInQ.publish(count); } runTime = System.currentTimeMillis() - start; } catch (InterruptedException e) { return; } }
@Override public void run() { //The producers are shut down first, so keep going until the queue is empty. while (!Thread.currentThread().isInterrupted() || queue.size() != 0) { queue.consume(handler); } } }
int consumeCount = receiveQueue.consume(BoltExecutor.this, tillNoPendingEmits); if (consumeCount == 0) { if (consumeIdleCounter == 0) {
@Test public void testNoReOrderingUnderBackPressure() throws Exception { final int MESSAGES = 100; final int CAPACITY = 64; final JCQueue queue = createQueue("testBackPressure", CAPACITY); for (int i = 0; i < MESSAGES; i++) { if (!queue.tryPublish(i)) { Assert.assertTrue(queue.tryPublishToOverflow(i)); } } TestConsumer consumer = new TestConsumer(); queue.consume(consumer); Assert.assertEquals(MESSAGES, consumer.lastMsg); queue.close(); }
@Test public void testBasicBackPressure() throws Exception { final int MESSAGES = 100; final int CAPACITY = 64; final JCQueue queue = createQueue("testBackPressure", CAPACITY); // pump more msgs than Q size & verify msg count is as expexted for (int i = 0; i < MESSAGES; i++) { if (i >= CAPACITY) { Assert.assertFalse(queue.tryPublish(i)); } else { Assert.assertTrue(queue.tryPublish(i)); } } Assert.assertEquals(CAPACITY, queue.size()); Assert.assertEquals(0, queue.getOverflowCount()); // drain 1 element and ensure BP is relieved (i.e tryPublish() succeeds) final MutableLong consumeCount = new MutableLong(0); queue.consume(new TestConsumer(), () -> consumeCount.increment() <= 1); Assert.assertEquals(CAPACITY - 1, queue.size()); Assert.assertTrue(queue.tryPublish(0)); queue.close(); }