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}"); }
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()}"); }