Mercurial > pub > ImplabNet
comparison MonoPlay/Program.cs @ 121:62d2f1e98c4e v2
working version of AsyncQueue and batch operations
tests
| author | cin |
|---|---|
| date | Mon, 12 Jan 2015 18:19:41 +0300 |
| parents | f1b897999260 |
| children | 0c8685c8b56b |
comparison
equal
deleted
inserted
replaced
| 120:f1b897999260 | 121:62d2f1e98c4e |
|---|---|
| 14 var q1 = new AsyncQueue<int>(); | 14 var q1 = new AsyncQueue<int>(); |
| 15 var q2 = new Queue<int>(); | 15 var q2 = new Queue<int>(); |
| 16 | 16 |
| 17 const int count = 10000000; | 17 const int count = 10000000; |
| 18 | 18 |
| 19 | 19 int res1 = 0, res2 = 0; |
| 20 var t1 = Environment.TickCount; | 20 var t1 = Environment.TickCount; |
| 21 | 21 |
| 22 AsyncPool.ThreadRun( | 22 AsyncPool.RunThread( |
| 23 () => { | 23 () => { |
| 24 for (var i = 0; i < count; i++) | 24 for (var i = 0; i < count; i++) |
| 25 q1.Enqueue(i); | 25 q1.Enqueue(1); |
| 26 Console.WriteLine("done writer #1: {0} ms", Environment.TickCount - t1); | |
| 26 }, | 27 }, |
| 27 () => { | 28 () => { |
| 28 for (var i = 0; i < count; i++) | 29 for (var i = 0; i < count; i++) |
| 29 q1.Enqueue(i); | 30 q1.Enqueue(2); |
| 31 Console.WriteLine("done writer #2: {0} ms", Environment.TickCount - t1); | |
| 30 }, | 32 }, |
| 31 () => { | 33 () => { |
| 32 int temp = 0; | 34 int temp = 0; |
| 33 int i = 0; | 35 int i = 0; |
| 34 while (i < count) | 36 while (i < count) |
| 35 if (q1.TryDequeue(out temp)) | 37 if (q1.TryDequeue(out temp)) { |
| 36 i++; | 38 i++; |
| 39 res1 += temp; | |
| 40 } | |
| 41 Console.WriteLine("done reader #1: {0} ms", Environment.TickCount - t1); | |
| 37 }, | 42 }, |
| 38 () => { | 43 () => { |
| 39 int temp = 0; | 44 int temp = 0; |
| 40 int i = 0; | 45 int i = 0; |
| 41 while (i < count) | 46 while (i < count) |
| 42 if (q1.TryDequeue(out temp)) | 47 if (q1.TryDequeue(out temp)) { |
| 43 i++; | 48 i++; |
| 49 res2 += temp; | |
| 50 } | |
| 51 Console.WriteLine("done reader #2: {0} ms", Environment.TickCount - t1); | |
| 44 } | 52 } |
| 45 ) | 53 ) |
| 46 .Combine() | 54 .Combine() |
| 47 .Join(); | 55 .Join(); |
| 56 | |
| 57 Console.WriteLine("done: {0} ms, summ#1: {1}, summ#2: {2}, total: {3}", Environment.TickCount - t1, res1, res2, res1 + res2); | |
| 48 | 58 |
| 49 var t2 = Environment.TickCount; | 59 var t2 = Environment.TickCount; |
| 50 Console.WriteLine("MTQueue: {0} ms", t2 - t1); | 60 Console.WriteLine("MTQueue: {0} ms", t2 - t1); |
| 51 | 61 |
| 52 t1 = Environment.TickCount; | 62 t1 = Environment.TickCount; |
| 63 q2 = new Queue<int>(); | 73 q2 = new Queue<int>(); |
| 64 | 74 |
| 65 t1 = Environment.TickCount; | 75 t1 = Environment.TickCount; |
| 66 | 76 |
| 67 | 77 |
| 68 AsyncPool.ThreadRun( | 78 AsyncPool.RunThread( |
| 69 () => { | 79 () => { |
| 70 for (var i = 0; i < count; i++) | 80 for (var i = 0; i < count; i++) |
| 71 lock (q2) | 81 lock (q2) |
| 72 q2.Enqueue(i); | 82 q2.Enqueue(i); |
| 73 }, | 83 }, |
