2010-07-28 8 views
5

Ich habe Benchmarks von Actor-Modell-Implementierungen in Bezug auf ihre Akteure gesehen. Zum Beispiel sind Akka-Akteure sehr leicht (600 Bytes pro Akteur) und Millionen von ihnen können erstellt werden. Ich habe jedoch noch nie einen Benchmark im Hinblick auf den Message-Passing-Durchsatz gesehen.Leistung der Nachrichtenübergabe im Actor-Modell

Zum Beispiel, bei einer bestimmten Anzahl von Akteuren, wie viele Nachrichten können sie pro Sekunde passieren?

Hat jemand eine Verbindung zu einem solchen Leistungs-Benchmark (in Bezug auf Message-Passing-Durchsatz)?

Antwort

0

Wenn ich einen Leistungstest mit diesem einfachen Akteur durchführte, der um meine Implementierung des Modells gebaut wurde, hatte es einen Durchsatz von 444773.906 Nachrichten pro Sekunde. Natürlich ist es ein künstlicher Test, aber es gibt Ihnen eine allgemeine Vorstellung davon, wie es in der Wildnis funktionieren könnte.

private class TestActor : Actor<int, bool> 
{ 
    protected override void ProcessMessage(AsyncReplyPackage<int, bool> package) 
    { 
     package.ReplyChannel.Send(package.Message > 2000000); 
    } 
} 

static void Main(string[] args) 
{ 
    var r = false; 
    using (var ts = new TestActor()) 
    using (var rc = new AsyncChannel<bool>()) 
    { 
     ts.PostWithAsyncReply(0, rc); 
     r = rc.Receive(); 

     var count = 3000000; 
     var sw = Stopwatch.StartNew(); 
     for (int i = 0; i < count; i++) 
     { 
      ts.PostWithAsyncReply(i, rc); 
      r = rc.Receive(); 
     } 
     Console.WriteLine(sw.Elapsed); 
    } 
    Console.WriteLine(r); 
    Console.ReadLine();   
} 

Größe

brach ich den Profiler aus und es sieht aus wie meine Implementierung 944 Bytes ist. :(

+0

Ich denke, diese Frage ist immer noch sehr inte ruhen. Wenn jemand etwas beizutragen hat ... oder wenn es ein Werkzeug gibt, um scala zu überwachen, akka performance. – jimakos17