Exemplo n.º 1
0
        private static void RunMPC(ITransmitter transmitter, IGoalUtilizer utilizer)
        {
            utilizer.Reset();
            var generator = new GoalGenerator();
            IList <Producer> producers = new List <Producer>()
            {
                new Producer(generator, transmitter)
            };
            IList <Consumer> consumers = new List <Consumer>();

            consumers.Add(new Consumer(utilizer, transmitter));
            consumers.Add(new Consumer(utilizer, transmitter));
            consumers.Add(new Consumer(utilizer, transmitter));
            GoalManager manager = new GoalManager(producers, consumers);

            Stopwatch stopWatchBody = new Stopwatch();

            stopWatchBody.Start();

            manager.Run();
            Thread.Sleep(5000);//22 000 000
            manager.Stop();

            stopWatchBody.Stop();
            string    elapsedTimeBody = ConvertTSToString(stopWatchBody.Elapsed);
            Stopwatch stopWatchFinish = new Stopwatch();

            stopWatchFinish.Start();
            var isOk = utilizer.WasUtilizeSuccessful();

            stopWatchFinish.Stop();
            string elapsedTimeFinish = ConvertTSToString(stopWatchFinish.Elapsed);

            Console.WriteLine($"{transmitter.GetType().Name.PadRight(30)} isOk {isOk} nGoals: {generator.Counter} BodyTime: {elapsedTimeBody} FinishTime: {elapsedTimeFinish}");
        }
Exemplo n.º 2
0
        private static void TestMPC(ITransmitter transmitter)
        {
            var sw = new Stopwatch();

            sw.Start();
            var nGoals    = 90000000;
            int nConsumer = 3;
            var producer  = new Producer(transmitter, nGoals, nConsumer);
            var consumers = new List <Consumer>(nConsumer);

            WaitHandle[] waitHandles = new WaitHandle[nConsumer];
            for (int i = 0; i < nConsumer; i++)
            {
                var waitHandle = new AutoResetEvent(false);
                waitHandles[i] = waitHandle;
                consumers.Add(new Consumer(transmitter, waitHandle));
            }
            producer.Start();
            consumers.ForEach(s => s.Start());

            var set = new HashSet <long>();

            for (long i = 0; i < nGoals; i++)
            {
                set.Add(i);
            }
            WaitHandle.WaitAll(waitHandles);
            foreach (var consumer in consumers)
            {
                foreach (var goal in consumer.Goals)
                {
                    if (set.Contains(goal))
                    {
                        set.Remove(goal);
                    }
                    else
                    {
                        Console.WriteLine($"Can't find goal id {goal}");
                    }
                }
            }

            sw.Stop();
            Console.WriteLine($"{transmitter.GetType().Name.PadRight(30)} {set.Count} {sw.Elapsed.ToString()}");
        }