Exemplo n.º 1
0
        public OneToThreeDiamondSequencedThroughputTest()
        {
            var sequenceBarrier = _ringBuffer.NewBarrier();

            var fizzHandler = new FizzBuzzEventHandler(FizzBuzzStep.Fizz);

            _batchProcessorFizz = BatchEventProcessorFactory.Create(_ringBuffer, sequenceBarrier, fizzHandler);

            var buzzHandler = new FizzBuzzEventHandler(FizzBuzzStep.Buzz);

            _batchProcessorBuzz = BatchEventProcessorFactory.Create(_ringBuffer, sequenceBarrier, buzzHandler);

            var sequenceBarrierFizzBuzz = _ringBuffer.NewBarrier(_batchProcessorFizz.Sequence, _batchProcessorBuzz.Sequence);

            _fizzBuzzHandler        = new FizzBuzzEventHandler(FizzBuzzStep.FizzBuzz);
            _batchProcessorFizzBuzz = BatchEventProcessorFactory.Create(_ringBuffer, sequenceBarrierFizzBuzz, _fizzBuzzHandler);

            var temp = 0L;

            for (long i = 0; i < _iterations; i++)
            {
                var fizz = 0 == (i % 3L);
                var buzz = 0 == (i % 5L);

                if (fizz && buzz)
                {
                    ++temp;
                }
            }
            _expectedResult = temp;

            _ringBuffer.AddGatingSequences(_batchProcessorFizzBuzz.Sequence);
        }
 public ThreeToOneSequencedThroughputTest()
 {
     _sequenceBarrier     = _ringBuffer.NewBarrier();
     _batchEventProcessor = BatchEventProcessorFactory.Create(_ringBuffer, _sequenceBarrier, _handler);
     for (var i = 0; i < _numPublishers; i++)
     {
         _valuePublishers[i] = ValuePublisher;
     }
     _ringBuffer.AddGatingSequences(_batchEventProcessor.Sequence);
 }
Exemplo n.º 3
0
        public OneToOneSequencedLongArrayThroughputTest()
        {
            _ringBuffer = RingBuffer <long[]> .CreateSingleProducer(() => new long[_arraySize], _bufferSize, new YieldingWaitStrategy());

            var sequenceBarrier = _ringBuffer.NewBarrier();

            _handler             = new LongArrayEventHandler();
            _batchEventProcessor = BatchEventProcessorFactory.Create(_ringBuffer, sequenceBarrier, _handler);
            _ringBuffer.AddGatingSequences(_batchEventProcessor.Sequence);
        }
        public BatchEventProcessorBenchmarks()
        {
            _ringBuffer   = new RingBuffer <TestEvent>(() => new TestEvent(), new SingleProducerSequencer(4096, new SpinWaitWaitStrategy()));
            _eventHandler = new TestEventHandler();
            _processor    = BatchEventProcessorFactory.Create(_ringBuffer, _ringBuffer.NewBarrier(), _eventHandler);

            _eventHandler.Processor  = _processor;
            _eventHandler.RingBuffer = _ringBuffer;
            _ringBuffer.AddGatingSequences(_processor.Sequence);
        }
        public OneToOneSequencedThroughputTest()
        {
            _eventHandler = new AdditionEventHandler();
            _ringBuffer   = RingBuffer <PerfEvent> .CreateSingleProducer(PerfEvent.EventFactory, _bufferSize, new YieldingWaitStrategy());

            var sequenceBarrier = _ringBuffer.NewBarrier();

            _batchEventProcessor = BatchEventProcessorFactory.Create(_ringBuffer, sequenceBarrier, _eventHandler);
            _ringBuffer.AddGatingSequences(_batchEventProcessor.Sequence);
        }
Exemplo n.º 6
0
        public Lifecycle_Aware_Test()
        {
            _startLatch    = new CountdownEvent(1);
            _shutdownLatch = new CountdownEvent(1);

            _ringBuffer = RingBuffer <StubEvent> .CreateMultiProducer(() => new StubEvent(-1), 16);

            _barrier   = _ringBuffer.NewBarrier();
            _handler   = new LifecycleAwareEventHandler(_startLatch, _shutdownLatch);
            _processor = new BatchEventProcessor <StubEvent>(_ringBuffer, _barrier, _handler);
        }
        public ThreeToOneSequencedBatchThroughputTest()
        {
            var sequenceBarrier = _ringBuffer.NewBarrier();

            for (var i = 0; i < _numPublishers; i++)
            {
                _valuePublishers[i] = new ValueBatchPublisher(_cyclicBarrier, _ringBuffer, _iterations / _numPublishers, 10);
            }

            _batchEventProcessor = BatchEventProcessorFactory.Create(_ringBuffer, sequenceBarrier, _handler);
            _ringBuffer.AddGatingSequences(_batchEventProcessor.Sequence);
        }
Exemplo n.º 8
0
        public PingPongSequencedLatencyTest()
        {
            _pingBuffer = RingBuffer <ValueEvent> .CreateSingleProducer(ValueEvent.EventFactory, _bufferSize, new BlockingWaitStrategy());

            _pongBuffer = RingBuffer <ValueEvent> .CreateSingleProducer(ValueEvent.EventFactory, _bufferSize, new BlockingWaitStrategy());

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

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

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

            _pingBuffer.AddGatingSequences(_pongProcessor.Sequence);
            _pongBuffer.AddGatingSequences(_pingProcessor.Sequence);
        }
Exemplo n.º 9
0
        public void Run()
        {
            if (IsRunning)
            {
                return;
            }

            var sequenceBarrier   = _ringBuffer.NewBarrier();
            var orderEventHandler = new OrderEventHandler();

            _orderBatchProcessor = BatchEventProcessorFactory.Create(_ringBuffer, sequenceBarrier, orderEventHandler);
            _orderBatchProcessor.WaitUntilStarted(TimeSpan.FromSeconds(3));
            _tasks.Add(Task.Run(() => _orderBatchProcessor.Run()));

            IsRunning = true;
            _latch.WaitOne();
            _orderBatchProcessor.Halt();
            Task.WaitAll(_tasks.ToArray());

            IsRunning = false;
        }
Exemplo n.º 10
0
        public OneToThreePipelineSequencedThroughputTest()
        {
            var stepOneFunctionHandler = new FunctionEventHandler(FunctionStep.One);
            var stepTwoFunctionHandler = new FunctionEventHandler(FunctionStep.Two);

            _stepThreeFunctionHandler = new FunctionEventHandler(FunctionStep.Three);

            var stepOneSequenceBarrier = _ringBuffer.NewBarrier();

            _stepOneBatchProcessor = BatchEventProcessorFactory.Create(_ringBuffer, stepOneSequenceBarrier, stepOneFunctionHandler);

            var stepTwoSequenceBarrier = _ringBuffer.NewBarrier(_stepOneBatchProcessor.Sequence);

            _stepTwoBatchProcessor = BatchEventProcessorFactory.Create(_ringBuffer, stepTwoSequenceBarrier, stepTwoFunctionHandler);

            var stepThreeSequenceBarrier = _ringBuffer.NewBarrier(_stepTwoBatchProcessor.Sequence);

            _stepThreeBatchProcessor = BatchEventProcessorFactory.Create(_ringBuffer, stepThreeSequenceBarrier, _stepThreeFunctionHandler);

            var temp       = 0L;
            var operandTwo = _operandTwoInitialValue;

            for (long i = 0; i < _iterations; i++)
            {
                var stepOneResult = i + operandTwo--;
                var stepTwoResult = stepOneResult + 3;

                if ((stepTwoResult & 4L) == 4L)
                {
                    ++temp;
                }
            }
            _expectedResult = temp;

            _ringBuffer.AddGatingSequences(_stepThreeBatchProcessor.Sequence);
        }
Exemplo n.º 11
0
 public Task Submit(IBatchEventProcessor <T> eventProcessor)
 {
     return(Task.Factory.StartNew(eventProcessor.Run));
 }
 public void Setup()
 {
     _processor    = BatchEventProcessorFactory.Create(_ringBuffer, _ringBuffer.NewBarrier(), new XEventHandler(() => _processor.Halt()));
     _processorRef = BatchEventProcessorFactory.Create(_ringBuffer, _ringBuffer.NewBarrier(), new XEventHandler(() => _processorRef.Halt()), typeof(BatchEventProcessorRef <, , , ,>));
 }
Exemplo n.º 13
0
 public void SetUp()
 {
     _sequenceBarrier     = _ringBuffer.NewBarrier();
     _eventHandler        = new LifecycleAwareEventHandler(_startSignal, _shutdownSignal);
     _batchEventProcessor = BatchEventProcessorFactory.Create(_ringBuffer, _sequenceBarrier, _eventHandler);
 }