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 TestMPCs(IGoalUtilizer utilizer) { //RunMPC(new UnsafeTransmitter()); //RunMPC(new ConcurrentQueueDIYTransmitter(), utilizer); RunMPC(new ConcurrentQueueTransmitter(), utilizer); RunMPC(new MonitorTransmitter(), utilizer); using (var transmitter = new SemaphoreSlimTransmitter()) { RunMPC(transmitter, utilizer); } RunMPC(new InterlockedTransmitter(), utilizer); using (var transmitter = new SemaphoreTransmitter(true)) { RunMPC(transmitter, utilizer); } using (var transmitter = new SemaphoreTransmitter(false)) { RunMPC(transmitter, utilizer); } using (var transmitter = new MutexTransmitter(true)) { RunMPC(transmitter, utilizer); } using (var transmitter = new MutexTransmitter(false)) { RunMPC(transmitter, utilizer); } using (var transmitter = new AutoResetEventTransmitter()) { RunMPC(transmitter, utilizer); } using (var transmitter = new EventWaitHandleAutoTransmitter()) { RunMPC(transmitter, utilizer); } }
public Consumer(IGoalUtilizer utilizer, ITransmitter transmitter) { _utilizer = utilizer; _transmitter = transmitter; }