【问题标题】:Overhead of Mono Tasklet/Co-RoutinesMono Tasklet/Co-Routines 的开销
【发布时间】:2010-11-20 09:01:08
【问题描述】:

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

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

在 Mono 2.6 中将添加对延续/协程的支持。我构建了一个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();
    }
}

微线程/调度程序运行大约需要 1.5-2 秒,而原始循环几乎是瞬间完成的。虽然预计会产生开销,但这似乎有点多。

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

谢谢

【问题讨论】:

    标签: c# mono lua coroutine python-stackless


    【解决方案1】:

    如果我没记错的话,你的代码每秒产生超过 200 万次产量,这应该与无堆栈 python 大致相同。

    考虑到 mono 执行实际应用程序代码的速度通常比 python 快 10 到 100 倍,性能可能会非常好,除非您的所有代码都在没有做任何实际工作的情况下产生,我不认为这是非常有用:)

    【讨论】:

      【解决方案2】:

      鉴于有专业知识的人很少能回答这个问题,你可能不得不去找他们,在 mono-devel 列表上询问。

      您还可以查看档案,了解有关 monoco/tasklet 引入时的讨论:

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

      【讨论】:

      • 感谢您提供该链接。我看了看,不幸的是,mono continuations 是堆栈复制类型,而不是堆栈指针类型。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2018-10-03
      相关资源
      最近更新 更多