##// END OF EJS Templates
Promises rewritten, added improved version of AsyncQueue
Promises rewritten, added improved version of AsyncQueue

File last commit:

r119:2573b562e328 v2
r119:2573b562e328 v2
Show More
Program.cs
110 lines | 3.1 KiB | text/x-csharp | CSharpLexer
using System;
using Implab.Diagnostics;
using Implab.Parallels;
using Implab;
using System.Collections.Generic;
using System.Collections.Concurrent;
namespace MonoPlay {
class MainClass {
public static void Main(string[] args) {
if (args == null)
throw new ArgumentNullException("args");
var q1 = new AsyncQueue<int>();
var q2 = new Queue<int>();
const int count = 10000000;
var t1 = Environment.TickCount;
new [] {
AsyncPool.InvokeNewThread(() => {
for (var i = 0; i < count; i++)
q1.Enqueue(i);
}),
AsyncPool.InvokeNewThread(() => {
for (var i = 0; i < count; i++)
q1.Enqueue(i);
}),
AsyncPool.InvokeNewThread(() => {
int temp = 0;
int i = 0;
while (i < count)
if (q1.TryDequeue(out temp))
i++;
}),
AsyncPool.InvokeNewThread(() => {
int temp = 0;
int i = 0;
while (i < count)
if (q1.TryDequeue(out temp))
i++;
})
}
.Combine()
.Join();
var t2 = Environment.TickCount;
Console.WriteLine("MTQueue: {0} ms", t2 - t1);
t1 = Environment.TickCount;
for (var i = 0; i < count * 2; i++)
q2.Enqueue(i);
for (var i = 0; i < count * 2; i++)
q2.Dequeue();
t2 = Environment.TickCount;
Console.WriteLine("Queue: {0} ms", t2 - t1);
q2 = new Queue<int>();
t1 = Environment.TickCount;
new [] {
AsyncPool.InvokeNewThread(() => {
for (var i = 0; i < count; i++)
lock (q2)
q2.Enqueue(i);
}),
AsyncPool.InvokeNewThread(() => {
for (var i = 0; i < count; i++)
lock (q2)
q2.Enqueue(i);
}),
AsyncPool.InvokeNewThread(() => {
for (int i = 0; i < count ;)
lock (q2) {
if (q2.Count == 0)
continue;
q2.Dequeue();
i++;
}
}),
AsyncPool.InvokeNewThread(() => {
for (int i = 0; i < count ;)
lock (q2) {
if (q2.Count == 0)
continue;
q2.Dequeue();
i++;
}
})
}
.Combine()
.Join();
t2 = Environment.TickCount;
Console.WriteLine("Queue+Lock: {0} ms", t2 - t1);
}
}
}