예제 #1
0
        public static unsafe Segment *Pop(this ISegmentPool pool)
        {
            Segment *result;

            if (pool.TryPop(out result) == false)
            {
                throw new InvalidOperationException("Pool cannot provide more memory");
            }

            return(result);
        }
예제 #2
0
파일: TimerWheel.cs 프로젝트: zhangz/RampUp
        public TimerWheel(ActorId thisActor, ISegmentPool pool, IMessageWriter writer, MessageHandler handler,
                          TimeSpan tickLength, Func <long> getTicks, long ticksPerSecond)
        {
            _envelope = new Envelope(thisActor);
            _pool     = pool;
            _handler  = handler;
            _getTicks = getTicks;
            _store    = new SegmentChainMessageStore(writer, pool);
            var segment = _pool.Pop();

            _wheel   = (Segment **)segment->Buffer;
            _segment = segment;

            // ensure clean wheel
            for (var i = 0; i < TimeoutsPerSegment; i++)
            {
                _wheel[i] = null;
            }

            _ticksPerMilisecond           = ticksPerSecond / 1000;
            _clockTickDurationInStopWatch = (long)tickLength.TotalMilliseconds * _ticksPerMilisecond;
            _startTime = _getTicks();
        }
예제 #3
0
 public SegmentChainMessageStore(IMessageWriter writer, ISegmentPool pool)
 {
     _writer        = writer;
     _pool          = pool;
     _segmentLength = _pool.SegmentLength;
 }
예제 #4
0
 internal SegmentStream(ISegmentPool pool)
     : base(new IndexCalculator(pool.SegmentLength))
 {
     _pool = pool;
 }
예제 #5
0
 public static SegmentStream GetStream(this ISegmentPool pool)
 {
     return(new SegmentStream(pool));
 }
예제 #6
0
 public StreamTests()
 {
     _pool = new SingleThreadSegmentPool(1024);
 }
예제 #7
0
 internal SegmentStream(ISegmentPool pool) :
     base(new IndexCalculator(pool.SegmentLength))
 {
     _pool = pool;
 }
예제 #8
0
파일: TimerWheel.cs 프로젝트: zhangz/RampUp
 public TimerWheel(ActorId thisActor, ISegmentPool pool, IMessageWriter writer, MessageHandler handler,
                   TimeSpan tickLength)
     : this(thisActor, pool, writer, handler, tickLength, Stopwatch.GetTimestamp, Stopwatch.Frequency)
 {
 }
예제 #9
0
 public StreamTests()
 {
     _pool = new SingleThreadSegmentPool(1024);
 }