Overhead di Mono Tasklet/Co-Routine
-
18-09-2019 - |
Domanda
Quali sono i principali costi generali in termini di prestazioni (copia gc/stack...) del nuovo framework Mono Continuations/Tasklet?
Come si confronta questo sovraccarico (prestazioni coroutine/prestazioni grezze) con altri framework come Lua Coroutine e Stackless Python?
In Mono 2.6 verrà aggiunto il supporto per continuazione/coroutine.Ho creato una versione svn e ho utilizzato il seguente codice per stimarne il sovraccarico
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();
}
}
L'esecuzione del microthread/scheduler ha richiesto circa 1,5-2 secondi, mentre il loop grezzo è quasi istantaneo.Anche se è previsto un sovraccarico, questo sembra un po' eccessivo.
Quali sono i principali costi generali in termini di prestazioni del nuovo framework Mono Continuations/Tasklet?Come si confronta questo sovraccarico (prestazioni coroutine/prestazioni grezze) con altri framework come Lua Coroutine e Stackless Python?
Grazie
Soluzione
Se non ho contato male, il tuo codice fa più di 2 milioni di rendimenti al secondo, che dovrebbero essere più o meno allo stesso livello di Python stackless.
Considerando che mono di solito eseguirà il codice dell'applicazione reale da 10 a 100 volte più velocemente di Python, le prestazioni saranno probabilmente molto buone a meno che tutto ciò che il tuo codice fa è produrre senza mai fare alcun lavoro reale, il che non penso sia molto utile :)
Altri suggerimenti
Dato che ci sono pochissime persone con le competenze per rispondere a questa domanda, potresti dover andare da loro e chiedere nell'elenco mono-sviluppo.
Puoi anche consultare gli archivi per vedere la discussione su monoco/tasklet quando è stato introdotto:
http://lists.ximian.com/pipermail/mono-devel-list/2009-April/031680.html