//--- Constructors --- public UpdateDelayQueue(TimeSpan delay, IUpdateRecordDispatcher dispatcher, ITransactionalQueue<XDoc> queue) { _delay = delay; _dispatcher = dispatcher; _queueTimer = TaskTimerFactory.Current.New(_delay, CheckExpire, null, TaskEnv.None); _persistentQueue = queue; _poll = true; _pollTimer = TaskTimerFactory.Current.New(TimeSpan.Zero, Poll, null, TaskEnv.None); _log.DebugFormat("created queue with {0} items recovered", queue.Count); }
//--- Constructors --- public UpdateDelayQueue(TimeSpan delay, IUpdateRecordDispatcher dispatcher, ITransactionalQueue <XDoc> queue) { _delay = delay; _dispatcher = dispatcher; _queueTimer = TaskTimerFactory.Current.New(_delay, CheckExpire, null, TaskEnv.None); _persistentQueue = queue; _poll = true; _pollTimer = TaskTimerFactory.Current.New(TimeSpan.Zero, Poll, null, TaskEnv.None); _log.DebugFormat("created queue with {0} items recovered", queue.Count); }
private void Enqueue(ITransactionalQueue <XDoc> queue, int n, ManualResetEvent trigger) { trigger.WaitOne(); for (var j = 0; j < n; j++) { queue.Enqueue(new XDoc("test") .Attr("id", j) .Elem("foo", "bar") .Start("baz") .Attr("meta", "true") .Value("dsfdsssssssssssssssssssssssssssssfdfsfsfsfsfsfsfd") .End() .Elem("id", StringUtil.CreateAlphaNumericKey(16))); } }
public void Perf_test_multi_thread_put_peek_and_take(ITransactionalQueue <XDoc> queue) { long totalEnqueue = 0; long totalDequeue = 0; var w = 5; var n = 5000; var m = 4; for (var k = 0; k < m; k++) { var enqueues = new List <Result>(); var trigger = new ManualResetEvent(false); for (var i = 0; i < w; i++) { enqueues.Add(AsyncUtil.ForkThread(() => Enqueue(queue, n, trigger), new Result())); } var stopwatch = Stopwatch.StartNew(); trigger.Set(); foreach (var r in enqueues) { r.Wait(); } stopwatch.Stop(); Assert.AreEqual(n * w, queue.Count); totalEnqueue += stopwatch.ElapsedMilliseconds; var j = 0; var dequeues = new List <Result <int> >(); trigger.Reset(); for (var i = 0; i < w; i++) { dequeues.Add(AsyncUtil.ForkThread(() => Dequeue(queue, trigger), new Result <int>())); } stopwatch = Stopwatch.StartNew(); trigger.Set(); foreach (var r in dequeues) { j += r.Wait(); } stopwatch.Stop(); totalDequeue += stopwatch.ElapsedMilliseconds; Assert.AreEqual(0, queue.Count); Assert.AreEqual(n * w, j); } Console.WriteLine("Enqueue: {0:0,000}/s", n * m * 1000 / totalEnqueue); Console.WriteLine("Dequeue: {0:0,000}/s", n * m * 1000 / totalDequeue); }
private void Perf_test_single_thread_put_peek_and_take(ITransactionalQueue <XDoc> queue) { long totalEnqueue = 0; long totalDequeue = 0; var n = 20000; var m = 4; for (var k = 0; k < m; k++) { var items = new List <XDoc>(); for (var i = 0; i < n; i++) { items.Add(new XDoc("test") .Attr("id", i) .Elem("foo", "bar") .Start("baz") .Attr("meta", "true") .Value("dsfdsssssssssssssssssssssssssssssfdfsfsfsfsfsfsfd") .End() .Start("id", StringUtil.CreateAlphaNumericKey(16))); } var stopwatch = Stopwatch.StartNew(); foreach (var itm in items) { queue.Enqueue(itm); } Assert.AreEqual(n, queue.Count); stopwatch.Stop(); totalEnqueue += stopwatch.ElapsedMilliseconds; var j = 0; stopwatch = Stopwatch.StartNew(); var v = queue.Dequeue(); while (v != null) { Assert.IsTrue(queue.CommitDequeue(v.Id)); j++; v = queue.Dequeue(); } stopwatch.Stop(); totalDequeue += stopwatch.ElapsedMilliseconds; Assert.AreEqual(n, j); Assert.AreEqual(0, queue.Count); } Console.WriteLine("Enqueue: {0:0,000}/s", n * m * 1000 / totalEnqueue); Console.WriteLine("Dequeue: {0:0,000}/s", n * m * 1000 / totalDequeue); }
private int Dequeue(ITransactionalQueue <XDoc> queue, ManualResetEvent trigger) { trigger.WaitOne(); var j = 0; ITransactionalQueueEntry <XDoc> value = queue.Dequeue(); while (value != null) { bool success = queue.CommitDequeue(value.Id); if (!success) { throw new InvalidOperationException(); } j++; value = queue.Dequeue(); } return(j); }
//--- Construtors public PersistentPubSubDispatchQueue(string queuePath, TaskTimerFactory taskTimerFactory, TimeSpan retryTime, Func<DispatchItem, Result<bool>> handler) { if(string.IsNullOrEmpty(queuePath)) { throw new ArgumentNullException("location"); } if(taskTimerFactory == null) { throw new ArgumentNullException("taskTimerFactory"); } if(handler == null) { throw new ArgumentNullException("handler"); } _queuePath = queuePath; _retryTime = retryTime; _queueTimer = taskTimerFactory.New(RetryDequeue, null); _queue = new TransactionalQueue<DispatchItem>(new MultiFileQueueStream(queuePath), new DispatchItemSerializer()) { DefaultCommitTimeout = TimeSpan.MaxValue }; _dequeueHandler = handler; Kick(); }
private void Perf_test_single_thread_put_peek_and_take(ITransactionalQueue<XDoc> queue) { long totalEnqueue = 0; long totalDequeue = 0; var n = 20000; var m = 4; for(var k = 0; k < m; k++) { var items = new List<XDoc>(); for(var i = 0; i < n; i++) { items.Add(new XDoc("test") .Attr("id", i) .Elem("foo", "bar") .Start("baz") .Attr("meta", "true") .Value("dsfdsssssssssssssssssssssssssssssfdfsfsfsfsfsfsfd") .End() .Start("id", StringUtil.CreateAlphaNumericKey(16))); } var stopwatch = Stopwatch.StartNew(); foreach(var itm in items) { queue.Enqueue(itm); } Assert.AreEqual(n, queue.Count); stopwatch.Stop(); totalEnqueue += stopwatch.ElapsedMilliseconds; var j = 0; stopwatch = Stopwatch.StartNew(); var v = queue.Dequeue(); while(v != null) { Assert.IsTrue(queue.CommitDequeue(v.Id)); j++; v = queue.Dequeue(); } stopwatch.Stop(); totalDequeue += stopwatch.ElapsedMilliseconds; Assert.AreEqual(n, j); Assert.AreEqual(0, queue.Count); } Console.WriteLine("Enqueue: {0:0,000}/s", n * m * 1000 / totalEnqueue); Console.WriteLine("Dequeue: {0:0,000}/s", n * m * 1000 / totalDequeue); }
private void Enqueue(ITransactionalQueue<XDoc> queue, int n, ManualResetEvent trigger) { trigger.WaitOne(); for(var j = 0; j < n; j++) { queue.Enqueue(new XDoc("test") .Attr("id", j) .Elem("foo", "bar") .Start("baz") .Attr("meta", "true") .Value("dsfdsssssssssssssssssssssssssssssfdfsfsfsfsfsfsfd") .End() .Elem("id", StringUtil.CreateAlphaNumericKey(16))); } }
private int Dequeue(ITransactionalQueue<XDoc> queue, ManualResetEvent trigger) { trigger.WaitOne(); var j = 0; ITransactionalQueueEntry<XDoc> value = queue.Dequeue(); while(value != null) { bool success = queue.CommitDequeue(value.Id); if(!success) { throw new InvalidOperationException(); } j++; value = queue.Dequeue(); } return j; }
public void Perf_test_multi_thread_put_peek_and_take(ITransactionalQueue<XDoc> queue) { long totalEnqueue = 0; long totalDequeue = 0; var w = 5; var n = 5000; var m = 4; for(var k = 0; k < m; k++) { var enqueues = new List<Result>(); var trigger = new ManualResetEvent(false); for(var i = 0; i < w; i++) { enqueues.Add(Async.ForkThread(() => Enqueue(queue, n, trigger), new Result())); } var stopwatch = Stopwatch.StartNew(); trigger.Set(); foreach(var r in enqueues) { r.Wait(); } stopwatch.Stop(); Assert.AreEqual(n * w, queue.Count); totalEnqueue += stopwatch.ElapsedMilliseconds; var j = 0; var dequeues = new List<Result<int>>(); trigger.Reset(); for(var i = 0; i < w; i++) { dequeues.Add(Async.ForkThread(() => Dequeue(queue, trigger), new Result<int>())); } stopwatch = Stopwatch.StartNew(); trigger.Set(); foreach(var r in dequeues) { j += r.Wait(); } stopwatch.Stop(); totalDequeue += stopwatch.ElapsedMilliseconds; Assert.AreEqual(0, queue.Count); Assert.AreEqual(n * w, j); } Console.WriteLine("Enqueue: {0:0,000}/s", n * m * 1000 / totalEnqueue); Console.WriteLine("Dequeue: {0:0,000}/s", n * m * 1000 / totalDequeue); }