コード例 #1
0
            public void OnEvent(ref PerfValueEvent data, long sequence, bool endOfBatch)
            {
                var next = _buffer.Next();

                _buffer[next].Value = data.Value;
                _buffer.Publish(next);
            }
コード例 #2
0
        public long Run(ThroughputSessionContext sessionContext)
        {
            long expectedCount = _batchEventProcessor.Sequence.Value + _iterations;

            _latch.Reset();
            _eventHandler.Reset(_latch, expectedCount);
            var processorTask = _executor.Execute(_batchEventProcessor.Run);

            _batchEventProcessor.WaitUntilStarted(TimeSpan.FromSeconds(5));

            sessionContext.Start();

            for (long i = 0; i < _iterations; i++)
            {
                long sequence = _ringBuffer.Next();
                _ringBuffer[sequence].Value = i;
                _ringBuffer.Publish(sequence);
            }

            _latch.WaitOne();
            sessionContext.Stop();
            PerfTestUtil.WaitForEventProcessorSequence(expectedCount, _batchEventProcessor);
            _batchEventProcessor.Halt();
            processorTask.Wait(2000);

            sessionContext.SetBatchData(_eventHandler.BatchesProcessedCount.Value, _iterations);

            PerfTestUtil.FailIfNot(_expectedResult, _eventHandler.Value, $"Handler should have processed {_expectedResult} events, but was: {_eventHandler.Value}");

            return(_iterations);
        }
コード例 #3
0
        public void ShouldClaimAndGet()
        {
            Assert.AreEqual(Sequence.InitialCursorValue, _ringBuffer.Cursor);

            var expectedEvent = new StubValueEvent(2701);

            var     claimSequence = _ringBuffer.Next();
            ref var oldEvent      = ref _ringBuffer[claimSequence];
コード例 #4
0
            public void OnEvent(ref StubValueEvent data, long sequence, bool endOfBatch)
            {
                if (!endOfBatch)
                {
                    _ringBuffer.Publish(_ringBuffer.Next());
                }

                _signal.Signal();
            }
コード例 #5
0
            private void Send()
            {
                _t0 = Stopwatch.GetTimestamp();
                var next = _buffer.Next();

                _buffer[next].Value = _counter;
                _buffer.Publish(next);

                _counter++;
            }
コード例 #6
0
    public static void PublishStubEvent(this ValueRingBuffer <StubValueEvent> ringBuffer, int value)
    {
        var sequence = ringBuffer.Next();

        try
        {
            ringBuffer[sequence].Value = value;
        }
        finally
        {
            ringBuffer.Publish(sequence);
        }
    }
コード例 #7
0
        public void PublishClassic()
        {
            var sequence = _ringBuffer.Next();

            try
            {
                ref var data = ref _ringBuffer[sequence];
                data.L1 = 1;
                data.L2 = 2;
                data.L3 = 3;
                data.L4 = 4;
                data.L5 = 5;
                data.L6 = 6;
            }
コード例 #8
0
 public void ShouldDelegateNextAndPublish()
 {
     _ringBuffer.Publish(_ringBuffer.Next());
 }