コード例 #1
0
        public OneToOneSequencedBatchValueThroughputTest()
        {
            _ringBuffer = ValueRingBuffer <PerfValueEvent> .CreateSingleProducer(PerfValueEvent.EventFactory, _bufferSize, new YieldingWaitStrategy());

            var sequenceBarrier = _ringBuffer.NewBarrier();

            _handler             = new AdditionEventHandler();
            _batchEventProcessor = BatchEventProcessorFactory.Create(_ringBuffer, sequenceBarrier, _handler);
            _ringBuffer.AddGatingSequences(_batchEventProcessor.Sequence);
        }
コード例 #2
0
    public void ShouldNotPublishEventsIfBatchIsLargerThanRingBuffer()
    {
        var ringBuffer = ValueRingBuffer <long> .CreateSingleProducer(() => - 1L, 4);

        try
        {
            Assert.Throws <ArgumentException>(() => ringBuffer.TryPublishEvents(5));
        }
        finally
        {
            AssertEmptyRingBuffer(ringBuffer);
        }
    }
コード例 #3
0
    public void ShouldNotTryPublishEventsWhenBatchSizeIs0()
    {
        var ringBuffer = ValueRingBuffer <long> .CreateSingleProducer(() => - 1L, 4);

        try
        {
            Assert.Throws <ArgumentException>(() => ringBuffer.TryPublishEvents(0));
        }
        finally
        {
            AssertEmptyRingBuffer(ringBuffer);
        }
    }
コード例 #4
0
        public PingPongSequencedValueLatencyTest()
        {
            _pingBuffer = ValueRingBuffer <PerfValueEvent> .CreateSingleProducer(PerfValueEvent.EventFactory, _bufferSize, new BlockingWaitStrategy());

            _pongBuffer = ValueRingBuffer <PerfValueEvent> .CreateSingleProducer(PerfValueEvent.EventFactory, _bufferSize, new BlockingWaitStrategy());

            _pingBarrier = _pingBuffer.NewBarrier();
            _pongBarrier = _pongBuffer.NewBarrier();

            _pinger = new Pinger(_pingBuffer, _iterations, _pauseNanos);
            _ponger = new Ponger(_pongBuffer);

            _pingProcessor = BatchEventProcessorFactory.Create(_pongBuffer, _pongBarrier, _pinger);
            _pongProcessor = BatchEventProcessorFactory.Create(_pingBuffer, _pingBarrier, _ponger);

            _pingBuffer.AddGatingSequences(_pongProcessor.Sequence);
            _pongBuffer.AddGatingSequences(_pingProcessor.Sequence);
        }
コード例 #5
0
    public void ShouldPublishEvent()
    {
        var ringBuffer = ValueRingBuffer <long> .CreateSingleProducer(() => - 1L, 4);

        using (var scope = ringBuffer.PublishEvent())
        {
            scope.Event() = scope.Sequence;
        }

        using (var scope = ringBuffer.TryPublishEvent())
        {
            Assert.IsTrue(scope.HasEvent);
            Assert.IsTrue(scope.TryGetEvent(out var e));
            e.Event() = e.Sequence;
        }

        Assert.That(ringBuffer, ValueRingBufferEqualsConstraint.IsValueRingBufferWithEvents(0L, 1L));
    }