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); }
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); }
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); }
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); }
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; }
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); }
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 <, , , ,>)); }
public void SetUp() { _sequenceBarrier = _ringBuffer.NewBarrier(); _eventHandler = new LifecycleAwareEventHandler(_startSignal, _shutdownSignal); _batchEventProcessor = BatchEventProcessorFactory.Create(_ringBuffer, _sequenceBarrier, _eventHandler); }