private static void ConfigureWaitStrategy(IWaitStrategy waitStrategy, UnmanagedDisruptor <SendRequestEntry> disruptor, SendCompletionProcessor sendCompletionProcessor) { switch (waitStrategy) { case HybridWaitStrategy hybridWaitStrategy: hybridWaitStrategy.SequenceBarrierForSendCompletionProcessor = disruptor.GetBarrierFor(sendCompletionProcessor); return; } }
public SendRequestProcessingEngine(InternalZerioConfiguration configuration, IRioCompletionQueue sendingCompletionQueue, ISessionManager sessionManager) { _configuration = configuration; var ringBufferSize = configuration.SendRequestProcessingEngineRingBufferSize; _unmanagedRioBuffer = new UnmanagedRioBuffer <SendRequestEntry>(ringBufferSize, _configuration.SendingBufferLength); _disruptor = CreateDisruptor(sendingCompletionQueue, sessionManager); _ringBuffer = _disruptor.RingBuffer; }
public RequestProcessingEngine(ZerioConfiguration configuration, RioCompletionQueue sendingCompletionQueue, ISessionManager sessionManager) { _configuration = configuration; var ringBufferSize = ZerioConfiguration.GetNextPowerOfTwo(_configuration.SendingBufferCount + _configuration.ReceivingBufferCount * _configuration.SessionCount); _unmanagedRioBuffer = new UnmanagedRioBuffer <RequestEntry>(ringBufferSize, _configuration.SendingBufferLength); _disruptor = CreateDisruptor(sendingCompletionQueue, sessionManager); _ringBuffer = _disruptor.RingBuffer; }
private unsafe UnmanagedDisruptor <SendRequestEntry> CreateDisruptor(IRioCompletionQueue sendingCompletionQueue, ISessionManager sessionManager) { var waitStrategy = CreateWaitStrategy(); var disruptor = new UnmanagedDisruptor <SendRequestEntry>((IntPtr)_unmanagedRioBuffer.FirstEntry, _unmanagedRioBuffer.EntryReservedSpaceSize, _unmanagedRioBuffer.Length, new ThreadPerTaskScheduler(), ProducerType.Multi, waitStrategy); var sendRequestProcessor = new SendRequestProcessor(_configuration, sessionManager); var sendCompletionProcessor = new SendCompletionProcessor(_configuration, sendingCompletionQueue); disruptor.HandleEventsWith(sendRequestProcessor).Then(sendCompletionProcessor); ConfigureWaitStrategy(waitStrategy, disruptor, sendCompletionProcessor); return(disruptor); }
public void SetUp() { _executor = new StubExecutor(); _memory = UnmanagedRingBufferMemory.Allocate(4, TestValueEvent.Size); _disruptor = new UnmanagedDisruptor <TestValueEvent>(_memory.PointerToFirstEvent, _memory.EventSize, _memory.EventCount, _executor); }