Mono タスクレット/コルーチンのオーバーヘッド
-
18-09-2019 - |
質問
新しい Mono Continuations/Tasklet フレームワークの主なパフォーマンス オーバーヘッド (gc/スタック コピーなど) は何ですか?
このオーバーヘッド (コルーチンのパフォーマンス / 生のパフォーマンス) は、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 などの他のフレームワークとどのように比較されますか?
ありがとう
解決
私の計算が間違っていなかったら、あなたのコードは 1 秒あたり 200 万を超える収量を実行しており、これはスタックレス Python とほぼ同じはずです。
通常、mono は実際のアプリケーション コードを Python よりも 10 ~ 100 倍速く実行することを考えると、コードが実際の作業を一切行わずに結果だけを出力する場合を除き、パフォーマンスはおそらく非常に優れていると思われます。これはあまり有用ではないと思います。 :)
他のヒント
これに答える専門知識を持つ人がほとんどいないことを考えると、彼らのところに行き、モノ開発リストに載っているものを尋ねる必要があるかもしれません。
アーカイブを参照して、monoco/tasklet が導入されたときの議論を確認することもできます。
http://lists.ximian.com/pipermail/mono-devel-list/2009-April/031680.html