Каковы основные накладные расходы (копирование 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 без стека?
Спасибо