What are the main performance overheads (copying gc / stack ...) of the new Mono Continuations / Tasklet structure?
How does this overhead (performance / coroutine performance) compare with other frameworks like Lua Coroutine and unstable python?
In Mono 2.6, continuation / coroutine support will be added. I built the svn version and used the following code to evaluate its overhead
static void Main() { Console.WriteLine("starting.,.."); for(int i = 0; i < 10000; i++) { MicroThread t1 = new MicroThread(Run1); t1.Start(); } Scheduler.Run(); Console.WriteLine("starting raw loop.,.."); int x = 2; for (int i = 0; i < 10000 * 400; i++ ) { x++; } Console.WriteLine("1finished.,.. " + x.ToString()); Console.ReadLine(); } static void Run1() { for (int y = 0; y < 400; y++) { MicroThread.CurrentThread.Yield(); } }
Starting the microflow / scheduler took about 1.5-2 seconds, while the raw cycle was almost instantaneous. Although overhead is expected, this seems a bit big.
What are the main performance overheads of the new Mono Continuations / Tasklet? How does this overhead (performance / coroutine performance performance) compare with other frameworks like Lua Coroutine and unmanaged python?
thanks
source share