Накладные расходы на моно-тасклет/совместные подпрограммы

Каковы основные накладные расходы (копирование gc/stack...) новой платформы Mono Continuations/Tasklet?

Как эти накладные расходы (производительность сопрограммы/необработанная производительность) соотносятся с другими фреймворками, такими как Lua Coroutine и 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 и Python без стека?

Спасибо


person jameszhao00    schedule 17.08.2009    source источник


Ответы (2)


Если я не ошибся, ваш код дает более 2 миллионов выходов в секунду, что должно быть примерно на том же уровне, что и у Python без стека.

Учитывая, что моно обычно выполняет реальный код приложения в 10-100 раз быстрее, чем python, производительность, вероятно, будет очень хорошей, если только ваш код не будет выполнять доход без какой-либо реальной работы, что я не думаю, что очень полезно :)

person lupus    schedule 18.08.2009

Учитывая, что очень мало людей, обладающих опытом, чтобы ответить на этот вопрос, вам, возможно, придется пойти к ним и задать вопрос по списку моно-разработок.

Вы также можете просмотреть архивы, чтобы увидеть обсуждение monoco/tasklet, когда он был представлен:

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

person jpobst    schedule 17.08.2009
comment
Спасибо за эту ссылку. Я взглянул, и, к сожалению, моно-продолжения - это тип копирования стека, а не тип указателя стека. - person jameszhao00; 18.08.2009