Beispiel #1
0
        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();
        }