private static void Main(string[] args) { PiBenchmarkSettings benchmarkSettings = Configuration.GetConfiguration <PiBenchmarkSettings>("PiBenchmarkSettings"); var config = ConfigurationFactory.ParseString(File.ReadAllText("akka-config.hocon")); var actorSystem = ActorSystem.Create("PiCalcSys", config); var processorCount = Environment.ProcessorCount; var calculationCount = benchmarkSettings.CalculationCount; var piDigit = benchmarkSettings.PiDigit; var piIteration = benchmarkSettings.PiIteration; var taskCompletionSource = new TaskCompletionSource <bool>(); var piActors = actorSystem.ActorOf(Props.Create <PiCalculatorActor>().WithRouter(new RoundRobinPool(processorCount))); var echoActor = actorSystem.ActorOf(Props.Create(() => new EchoActor(calculationCount, taskCompletionSource))); WriteBenchmarkInfo(processorCount, calculationCount); Console.WriteLine(); WritePiBenchMark(piDigit, piIteration); Console.WriteLine(); var options = new CalcOptions { Digits = piDigit, Iterations = piIteration, ReceiverAddress = echoActor.Path.ToString() }; Console.WriteLine("Routee\t\t\tElapsed\t\tMsg/sec"); var tasks = taskCompletionSource.Task; var sw = Stopwatch.StartNew(); for (var i = 0; i < calculationCount; i++) { piActors.Tell(options); } Task.WaitAll(tasks); sw.Stop(); var totalMessages = calculationCount * 2; var x = (int)(totalMessages / (double)sw.ElapsedMilliseconds * 1000.0d); Console.WriteLine($"{processorCount}\t\t\t{sw.ElapsedMilliseconds}\t\t{x}"); Console.Read(); }
private static void Main(string[] args) { PiBenchmarkSettings benchmarkSettings = Configuration.GetConfiguration <PiBenchmarkSettings>("PiBenchmarkSettings"); var processorCount = Environment.ProcessorCount; var calculationCount = benchmarkSettings.CalculationCount; var piDigit = benchmarkSettings.PiDigit; var piIteration = benchmarkSettings.PiIteration; var taskCompletionSource = new TaskCompletionSource <bool>(); var piCalcProps = Router.NewRoundRobinPool(Actor.FromProducer(() => new PiCalculatorActor()), processorCount); var echoProps = Actor.FromProducer(() => new EchoActor(calculationCount, taskCompletionSource)); var piActors = Actor.Spawn(piCalcProps); var echoActor = Actor.SpawnNamed(echoProps, "echoActor"); WriteBenchmarkInfo(processorCount, calculationCount); Console.WriteLine(); WritePiBenchMark(piDigit, piIteration); Console.WriteLine(); var options = new CalcOptions { Digits = piDigit, Iterations = piIteration, ReceiverAddress = echoActor.Address }; Console.WriteLine("Routee\t\t\tElapsed\t\tMsg/sec"); var tasks = taskCompletionSource.Task; var sw = Stopwatch.StartNew(); for (var i = 0; i < calculationCount; i++) { piActors.Tell(options); } Task.WaitAll(tasks); sw.Stop(); var totalMessages = calculationCount * 2; var x = (int)(totalMessages / (double)sw.ElapsedMilliseconds * 1000.0d); Console.WriteLine($"{processorCount}\t\t\t{sw.ElapsedMilliseconds}\t\t{x}"); Console.Read(); }