public Sequencer3P1CDisruptorPerfTest()
            : base(20 * Million)
        {
            _disruptor = new Disruptor <ValueEvent>(() => new ValueEvent(), Size, TaskScheduler.Default, ProducerType.MULTI, new YieldingWaitStrategy());

            _mru          = new ManualResetEvent(false);
            _eventHandler = new ValueAdditionEventHandler(Iterations * NumProducers, _mru);
            _disruptor.HandleEventsWith(_eventHandler);

            _valueProducers = new ValueProducer[NumProducers];
            _ringBuffer     = _disruptor.GetRingBuffer;

            for (int i = 0; i < NumProducers; i++)
            {
                _valueProducers[i] = new ValueProducer(_testStartBarrier, _ringBuffer, Iterations);
            }
        }
예제 #2
0
        public Sequencer3P1CDisruptorWithAffinityPerfTest()
            : base(20 * Million)
        {
            _scheduler = new RoundRobinThreadAffinedTaskScheduler(4);
            _disruptor = new Disruptor <ValueEvent>(() => new ValueEvent(),
                                                    new MultiThreadedLowContentionClaimStrategy(Size),
                                                    new YieldingWaitStrategy(),
                                                    _scheduler);

            _mru          = new ManualResetEvent(false);
            _eventHandler = new ValueAdditionEventHandler(Iterations * NumProducers, _mru);
            _disruptor.HandleEventsWith(_eventHandler);

            _valueProducers = new ValueProducer[NumProducers];
            _ringBuffer     = _disruptor.RingBuffer;

            for (int i = 0; i < NumProducers; i++)
            {
                _valueProducers[i] = new ValueProducer(_testStartBarrier, _ringBuffer, Iterations);
            }
        }