Mono任务/协程的开销

新的Mono Continuations/Tasklet框架的主要性能开销是什么(例如,gc/堆栈复制...)?

这种开销(协程性能/原始性能)与其他框架(如Lua Coroutine和stackless python)相比如何?

在Mono 2.6中将添加continuation/coroutines支持。我建立了一个svn版本并使用以下代码来估算它的开销

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();
    }
}

microthread/scheduler运行大约需要1.5-2秒,而原始循环则几乎即刻,虽然预计存在开销,但这似乎有些多。

新的Mono Continuations/Tasklet框架的主要性能开销是什么?这种开销(协程性能/原始性能)与其他框架(如Lua Coroutine和stackless python)相比如何?

谢谢!

原文链接 https://stackoverflow.com/questions/1290051

点赞
stackoverflow用户16089
stackoverflow用户16089

考虑到很少有人具备回答这个问题的专业知识,你可能需要去向那些人请教,可以在 mono-devel 列表上咨询。你还可以查看归档记录,了解 monoco/tasklet 引入时的讨论:

http://lists.ximian.com/pipermail/mono-devel-list/2009-April/031680.html

2009-08-17 23:03:50
stackoverflow用户27051
stackoverflow用户27051

假如我没有算错的话,你的代码每秒执行超过 200 万个 yield,这应该与 stackless python 差不多。

考虑到 mono 通常比 Python 执行真正的应用代码快 10 倍到 100 倍,除非你的所有代码都只是 yield 而不做任何实际工作(我认为这没有多大用处),否则性能可能会非常好。

2009-08-18 06:53:13